gpt4 book ai didi

c++ - OpenCV 中的点多边形测试

转载 作者:行者123 更新时间:2023-11-28 00:55:59 25 4
gpt4 key购买 nike

我想使用 pointPolygonTest但我有一个问题。我的 OpenCV 版本是 2.2。

我尝试使用来自 this tutorial 的代码.

我使用 findContours检测图像中的轮廓。在 OpenCV 2.2 下返回 vector<vector<Point> > .

问题是 pointPolygonTest接受 cv::Mat作为条目。因此代码不能用 OpenCV 2.2 编译:

error: invalid initialization of reference of type ‘const cv::Mat&’ from expression of type ‘std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >’

在更新的 OpenCV 版本中,findContours函数返回 vector<Mat>所以很容易传递给pointPolygonTest (参见示例)。

我想我可以转换 vector< vector<Point> >vector<Mat> .不幸的是,文档对格式不是很清楚。

有人有什么建议吗?

最佳答案

The problem is that pointPolygonTest accept a cv::Mat as an entry.

那么为什么要使用旧版本的 OpenCV?这是 OpenCV 版本中此方法的声明。 2.4.1:

C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

如您所见,第一个参数是 InputArray不是矩阵。来自那篇文章:

You can assume that instead of InputArray/OutputArray you can always use Mat, std::vector<>, Matx<>, Vec<> or Scalar.

因此,这意味着您可以使用 std::vector<vector<Point> >作为InputArray等作为函数 pointPolygonTest 的输入.

这是使用 pointPolygonTest 的简单示例(当然在新版本中):

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
Mat src;

findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

for(size_t i = 0; i<contours.size(); i++)
{
if (pointPolygonTest(contours[i], point, false) > 0)
{
//point is inside polygon
...
break;
}
}

所以只需更新到新版本。

或者,如果你想在旧版本中使用它,试试这个转换:

    (Mat)contours[i]

或使用构造函数:

    Mat(contours[i])

希望对您有所帮助。

关于c++ - OpenCV 中的点多边形测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11210027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com