vector<Point> hull;
vector<Point> defects;
convexHull(Mat(largest),hull,false);
convexityDefects(largest,hull,defects);
* 最大是我在图像中最大的轮廓
但是凸性缺陷给了我这个错误“断言失败(hull.checkVector(1,CV_32S)&gt; 2)”。有人请帮助我,我不想求助于使用C解决方案。
EDITED
vector<int> hull;
vector<Point> defects;
convexHull(Mat(largest),hull,false);
vector<vector<int>> testhull;
testhull.push_back(hull);
convexityDefects(largest,testhull,defects);
我尝试使用vector<vector<int>>
类型将其传递给convexityDefects,但是convexityDefects仍然给我错误“断言失败(ptnum&gt; 3)..”。
答案 0 :(得分:4)
对于船体,你应该使用这样的矢量矢量:
vector<vector<Point>> hullsP( contours.size() );
vector<vector<int> > hullsI(contours.size());
并将“int”类型传递给covexityDefects.like:
vector<vector<Vec4i>> convdefect(contours.size());
for( int i = 0; i < contours.size(); i++ )
{
convexHull( Mat(contours[i]), hullsP[i], false );
convexHull( Mat(contours[i]), hullsI[i], false );
if(hullsI[i].size() > 3 )
convexityDefects(contours[i],hullsI[i],convdefect[i]);
}
答案 1 :(得分:2)
convexityDefects
的第二个参数必须是vector<vector<int>
的类型,而你的vector<Point>
是{{1}}。