目录
1. 计算笛卡尔坐标转换到极坐标的幅度 cv::magnitude()
2. 计算笛卡尔坐标转换到极坐标的角度 cv::phase()
3. 计算笛卡尔坐标转换到极坐标的幅度和角度 cv::cartToPolar()
4. 计算极坐标转换到笛卡尔坐标 cv::polarToCart()
1. 计算笛卡尔坐标转换到极坐标的幅度 cv::magnitude()
函数cv::magnitude()主要计算在二维向量场上笛卡尔坐标系到极坐标系转换的径向部分。即
使用cv::magnitude()时,应该表示为两个单独的单通道矩阵形式,两个输入应该具有相同的尺寸,如果有一个双通道矩阵,使用cv::split()函数拆分;输出矩阵中的每个元素都从x和y的相应元素中计算两者的欧几里得范数(即对应值的平方根)得到。
函数原型:
void cv::magnitude(
cv::InputArray x,
cv::InputArray y,
cv::OutputArray dst
);
使用示例:
cv::Mat x(1, 1, CV_32FC1, cv::Scalar(3));
cv::Mat y(1, 1, CV_32FC1, cv::Scalar(4));
cv::Mat dst;
cv::magnitude(x, y, dst);
std::cout << "dst = \n " << dst << std::endl;
显示结果:
2. 计算笛卡尔坐标转换到极坐标的角度 cv::phase()
cv::phase()函数对二维矢量场计算笛卡尔-极坐标转换的角度部分,与上面两个函数一样,该矢量场由两个独立的单通道矩阵组成。dst中的每个元素从x和y的相应元素中计算两者的反正切值。函数原型:
void cv::phase(
cv::InputArray x, // input array of x-components
cv::InputArray y, // input array of y-components
cv::OutputArray dst, // output array of angles
bool angleInDegrees = false // true = degrees;false = radians
);
3. 计算笛卡尔坐标转换到极坐标的幅度和角度 cv::cartToPolar()
cv::cartToPolar()函数使用两个输入矩阵x和y,分别表示一个向量场的x和y分量(需要注意这是两个单通道矩阵,不是一个双通道矩阵)。矩阵x和y必须有相同的尺寸,然后cv::cartToPolar()计算每个向量的极坐标表示。每个向量的幅度被放置在相应的位置上,每个向量的方向以角度的形式放置在相应的位置上。除非布尔变量angleInDegrees设置为true,否则返回的角度以弧度表示。
函数原型:
void cv::cartToPolar(
cv::InputArray x,
cv::InputArray y,
cv::OutputArray magnitude,
cv::OutputArray angle,
bool angleInDegree = false
);
计算公式如下:
使用示例:
float nX[] = { 1,3,4,3 };
float nY[] = { 1,4,3,6 };
cv::Mat m_x(1, 4, CV_32FC1, nX);
cv::Mat m_y(1, 4, CV_32FC1, nY);
std::cout << "m_x = \n " << m_x << std::endl;
std::cout << "m_y = \n " << m_y << std::endl;
cv::Mat magnitude, angle;
cv::cartToPolar(m_x, m_y, magnitude, angle);
std::cout << "magnitude = \n " << magnitude << std::endl;
std::cout << "angle = \n " << angle << std::endl;
cv::cartToPolar(m_x, m_y, magnitude, angle,true);
std::cout << "angle = \n " << angle << std::endl;
显示结果:
4. 计算极坐标转换到笛卡尔坐标 cv::polarToCart()
cv::polarToCart()函数从向量场的极坐标中计算笛卡尔坐标(x,y)。函数原型:
void cv::polarToCart(
cv::InputArray magnitude, // input array of magnitude
cv::InputArray angle, // input array of angles
cv::OutputArray x, // output array of x
cv::OutputArray y, // output array of y
bool angleInDegrees = false // true = degree, false = radians
);
该函数的计算公式:
两个输入矩阵分别表示幅度和角度,这两个矩阵需要具有相同尺寸和类型。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46185.html