0

我正在尝试从以下代码中获取凸面缺陷,但不断收到未处理的异常。我究竟做错了什么?

vector<Vec4i> defects;
ContourPoly = vector<Point>(contour.size());
approxPolyDP( Mat(contour), ContourPoly,20, false );
convexHull(Mat(ContourPoly), HullPoints, false, true);
// The following line wont work
convexityDefects(Mat(ContourPoly),HullPoints,defects);

而 HullPoints 的 typevector<Point> 异常如下

OpenCV Error: Assertion Failed (ptnum >3) is unknown function, file ..\..\..\src\opencv\modules\imgproc\src\contours.cpp, line 1969

但是使用 vector<Point> defects;orvector<Vec4i> defects 我得到以下异常

 OpenCV Error: Assertion Failed (hull.checkVector(1,CV_32S) is unknown function, file ..\..\..\src\opencv\modules\imgproc\src\contours.cpp, line 1971
4

2 回答 2

0

defects应该vector<Vec4i>

从文档中:

每个凸面缺陷表示为 4 元素整数向量cv::Vec4i(start_index, end_index, farthest_pt_index, fixpt_depth)aka fixpt_depth) 的最远轮廓点与船体之间的距离。也就是说,要获得深度的浮点值将是fixpt_depth/256.0

于 2013-04-09T17:29:38.253 回答
0

首先

vector<vector<Vec4i> > defects;

应该:

vector<vector<Vec4i> > defects( contour.size() );

另外,在调用convexityDefects函数之前,检查 的大小HullPoints是否大于 3。

于 2013-12-29T20:33:40.940 回答