我有一个vector<Point2f>
点,我需要转换为极地.我认为这样做的唯一功能是cartToPolar()
,由于某种原因,它不仅允许一个点矢量,而是需要两个,每个只包含x坐标和y坐标.
有没有任何优雅的解决方案或我必须手动制作这两个向量?
由于cv::Mat
具有与数据指针和步骤的构造,就可以使2作为交织X容器和每个y分量Point2f
的vector
,其具有连续的数据.
码
#include "opencv2/opencv.hpp"
int main(int argc,const char* argv[])
{
std::vector<cv::Point2f> sides;
sides.push_back(cv::Point2f(3, 4));
sides.push_back(cv::Point2f(6, 8));
sides.push_back(cv::Point2f(1, 1));
cv::Mat xpts(sides.size(), 1, CV_32F, &sides[0].x, 2 * sizeof(float));
cv::Mat ypts(sides.size(), 1, CV_32F, &sides[0].y, 2 * sizeof(float));
std::cout << "x: " << xpts.t() << std::endl;
std::cout << "y: " << ypts.t() << std::endl;
cv::Mat magnitude, angle;
cv::cartToPolar(xpts, ypts, magnitude, angle);
std::cout << "\nmagnitude: " << magnitude.t();
std::cout << "\nangle: " << angle.t() *180. / CV_PI << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
关键是步骤,2 * sizeof(float)
.除非您,否则不会复制数据clone
.
产量
x: [3, 6, 1]
y: [4, 8, 1]
magnitude: [5, 10, 1.4142135]
angle: [53.136284, 53.136284, 44.990456]
Run Code Online (Sandbox Code Playgroud)