- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
描述
计算二维向量的 x 和 y 坐标。
polarToCart 函数根据 magnitude 和 angle 的对应元素表示的每个二维向量,计算其笛卡尔坐标:
x ( I ) = magnitude ( I ) cos ( angle ( I ) ) y ( I ) = magnitude ( I ) sin ( angle ( I ) ) \begin{array}{l} \texttt{x} (I) = \texttt{magnitude} (I) \cos ( \texttt{angle} (I)) \\ \texttt{y} (I) = \texttt{magnitude} (I) \sin ( \texttt{angle} (I)) \\ \end{array} x(I)=magnitude(I)cos(angle(I))y(I)=magnitude(I)sin(angle(I))
估计坐标的相对精度约为 1e-6。
第一个输出是二维向量 x 坐标的矩阵。第二个输出是二维向量 y 坐标的矩阵。两个输出矩阵必须与输入矩阵具有相同的大小和深度。
注意:
该函数的文本ID是 “org.opencv.core.math.polarToCart”
函数原型
std::tuple<GMat, GMat> cv::gapi::polarToCart
(const GMat & magnitude,const GMat & angle,bool angleInDegrees = false
)
参数
- 参数magnitude: 输入浮点型 CV_32FC1 矩阵 (1xN),表示二维向量的大小(或长度)。
- 参数angle: 输入浮点型 CV_32FC1 矩阵 (1xN),表示二维向量的角度;角度可以以度或弧度表示,具体取决于 angleInDegrees 参数。
- 参数angleInDegrees: 如果为 true,则输入的角度以度为单位;否则,角度以弧度为单位。
代码示例
#include <opencv2/opencv.hpp>
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <tuple>int main() {// 创建示例输入矩阵cv::Mat magnitude = (cv::Mat_<float>(2, 2) << 1.f, 2.f,3.f, 4.f);cv::Mat angle = (cv::Mat_<float>(2, 2) << 0.f, 90.f,180.f, 270.f); // 角度以度为单位// 定义G-API计算图cv::GComputation polarToCartComp([](){cv::GMat inMagnitude, inAngle;auto xy = cv::gapi::polarToCart(inMagnitude, inAngle, true); // 使用度作为角度单位return cv::GComputation(cv::GIn(inMagnitude, inAngle), cv::GOut(std::get<0>(xy), std::get<1>(xy)));});// 输出矩阵cv::Mat x, y;// 执行计算图polarToCartComp.apply(cv::gin(magnitude, angle), cv::gout(x, y));// 打印结果std::cout << "X components: \n" << x << std::endl;std::cout << "Y components: \n" << y << std::endl;return 0;
}
运行结果
X components:
[1, 0;-3, 4.8984e-16]
Y components:
[0, 2;3.6738e-16, -4]