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);

それをconvexityDefectsに渡す前にタイプで作成しようとしましたvector<vector<int>>が、convexityDefectsで「アサーションに失敗しました(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

の2番目の引数はconvexityDefects、のタイプである必要がありますがvector<vector<int>、あなたの引数はですvector<Point>

于 2012-08-07T08:05:45.247 に答える