OpenCV中的minAreaRect函数是否支持double类型?

3

我正在一个三维环境中工作,有一个摄像机,因此一侧有一些三维坐标,另一侧正在使用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,但我意外地发现了这个函数,并希望避免编写自己的旋转卡尺函数。
谢谢!
1个回答

4

minAreaRect 只接受 PointPoint2f 类型的点,即类型为 CV_32SCV_32F 的点。

如果 float 点足够准确,您可以使用 Point2f 代替 Point2d

std::vector<cv::Point2f> poly{ { 1.1f, 2.2f }, { 3.3f, 4.4f }, { 5.5f, 6.6f }, { 7.7f, 8.8f } };
cv::RotatedRect box = cv::minAreaRect(poly); // now it works!

谢谢,它有效了 :) 所以,在OpenCV中,double不是浮点值,对吗? - Zermingore
在C++中,不仅在OpenCV中,doublefloat都是浮点值,其中double为64位,而float为32位。 - Miki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接