0
vector<Point> hull;
vector<Point> defects;
convexHull(Mat(largest),hull,false);
convexityDefects(largest,hull,defects);

*最大是我在图像中的最大轮廓

但是convexityDefects给了我这个错误“断言失败(hull.checkVector(1,CV_32S)> 2)”。有人请帮助我,我不想求助于使用 C 解决方案。

已编辑

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>>在将类型传递给凸度缺陷之前,我尝试使用该类型进行创建,但凸度缺陷仍然给我错误“断言失败(ptnum > 3)..”。

4

2 回答 2

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]);
}
于 2013-01-03T09:47:57.817 回答
2

的第二个参数convexityDefects必须是 的类型vector<vector<int>,而你的是vector<Point>

于 2012-08-07T08:05:45.247 回答