7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

导读:本篇文章讲解 7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. 计算笛卡尔坐标转换到极坐标的幅度 cv::magnitude()

 2. 计算笛卡尔坐标转换到极坐标的角度 cv::phase()

3. 计算笛卡尔坐标转换到极坐标的幅度和角度 cv::cartToPolar()

4. 计算极坐标转换到笛卡尔坐标 cv::polarToCart()


1. 计算笛卡尔坐标转换到极坐标的幅度 cv::magnitude()

 函数cv::magnitude()主要计算在二维向量场上笛卡尔坐标系到极坐标系转换的径向部分。即

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

使用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;

显示结果:

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

 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
);

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

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
);

计算公式如下:

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

使用示例:

	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;

 显示结果:

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

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
);

该函数的计算公式:

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

7_OpenCV 二维向量场笛卡尔坐标系与极坐标系的相互转换

两个输入矩阵分别表示幅度和角度,这两个矩阵需要具有相同尺寸和类型。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46185.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!