天天看点

cartToPolar Opencv

CV_EXPORTS_W void cartToPolar(InputArray x, InputArray y,
                              OutputArray magnitude, OutputArray angle,
                              bool angleInDegrees = false);
           

x:Mat,这必须是单精度或双精度浮点数组

y:Mat,其大小和类型必须与x相同

magnitude:输出与x相同大小和类型的大小数组

angle:与x具有相同大小和类型的角度的输出数组;角度以弧度(从0到2*Pi)或度(0到360度)度量

angleInDegrees:标志,指示结果是以弧度(默认情况下是以弧度)还是以度度量

注意:输入数组必须具有相同精度

作用1:根据勾股定理求出另一条边的长度和三角形的角度(y/x=tan α)。

作用2:取梯度幅值和方向。先用sobel求出水平和垂直方向的梯度,再用cartToPolar求出梯度幅值和方向。

输入x/y均为2维向量,其实现如下:

cartToPolar Opencv

代码1:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    Mat xx = Mat(2, 3, CV_32FC1, Scalar(6, 0, 0));
    Mat yy = Mat(2, 3, CV_32FC1, Scalar(6, 0, 0));

    cout << xx << endl;
    cout << yy << endl;

    Mat mag, angle;

    cartToPolar(xx, yy, mag, angle, true);
    cout << mag << endl;
    cout << angle << endl;
}
// out
//看xx和yy的0,0位置,都是6,根据勾股定理第三边是6*根号2=8.485281,角度是45度。
[6, 6, 6;
 6, 6, 6]
[6, 6, 6;
 6, 6, 6]
[8.485281, 8.485281, 8.485281;
 8.485281, 8.485281, 8.485281]
[44.990456, 44.990456, 44.990456;
 44.990456, 44.990456, 44.990456]
           

代码2:

vector<Point2f> sides;//建立容器存坐标
sides.push_back(Point2f(3, 4));
sides.push_back(Point2f(6, 8));
sides.push_back(Point2f(1, 1));
 
Mat xpts(sides.size(), 1, CV_32F, &sides[0].x, 2 * sizeof(float));
Mat ypts(sides.size(), 1, CV_32F, &sides[0].y, 2 * sizeof(float));
 
cout << "x: " << xpts.t() << endl;
cout << "y: " << ypts.t() << endl;
 
Mat magnitude, angle;
cartToPolar(xpts, ypts, magnitude, angle);//调用库函数
 
cout << "\nmagnitude: " << magnitude.t();
cout << "\nangle: " << angle.t() *180. / CV_PI << endl;
 
 
x: [3, 6, 1]
y: [4, 8, 1]
 //看xx和yy的0,0位置分别是3和4,根据勾股定理第三边是5,4/3 = tanα,α=53.136284度
magnitude: [5, 10, 1.4142135]
angle: [53.136284, 53.136284, 44.990456]
           

参考:

https://zj-image-processing.readthedocs.io/zh_CN/latest/opencv/code/[cartToPolar]%E4%BA%8C%E7%BB%B4%E5%90%91%E9%87%8F%E7%9A%84%E5%A4%A7%E5%B0%8F%E5%92%8C%E8%A7%92%E5%BA%A6/

https://blog.csdn.net/qq_30460949/article/details/91393048

https://zhuanlan.zhihu.com/p/75705284