我正在一个三维环境中工作,有一个摄像机,因此一侧有一些三维坐标,另一侧正在使用OpenCV进行实验。
我需要找到一个最小的边界矩形,以考虑二维坐标,并希望使用OpenCV来完成这项工作。
问题是我的坐标以双精度表示。
我尝试过:
std::vector<cv::Point2d> poly {{1.1, 2.2}, {3.3, 4.4}, {5.5, 6.6}, {7.7, 8.8}};
cv::RotatedRect box = cv::minAreaRect(poly); // crashes here
cv::Point2f corners[4];
box.points(corners);
但是得到以下错误:
OpenCV错误:在minAreaRect中断言失败(points.checkVector(2)> = 0 &&(points.depth()== CV_32F || points.depth()== CV_32S)),文件/build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/contours.cpp,行1913
如果我使用某些Point
而不是Point2d
,则结果矩形的坐标将被截断
// narrowing conversions
std::vector<cv::Point2d> poly {{1.1, 2.2}, {3.3, 4.4}, {5.5, 6.6}, {7.7, 8.8}};
cv::RotatedRect box = cv::minAreaRect(poly);
cv::Point2f corners[4];
box.points(corners);
我不确定是否正确地使用了OpenCV,但我意外地发现了这个函数,并希望避免编写自己的旋转卡尺函数。
谢谢!
double
和float
都是浮点值,其中double
为64位,而float
为32位。 - Miki