3

私はすでにここここの投稿を読んだことがありますが、私が得るエラーを解決しません。

私のコード

vector<Vec4i> defects;
vector<vector<int> >hull( contours.size() );
for (int i = 0; i < contours.size(); i++)
{
    convexHull( contours[i], hull[i], false, false );
    if(contours[i].size() > 3 )
        convexityDefects(contours[i], hull[i], defects[i]);
}

上記の投稿によると、これは機能するはずですが、機能しません。私はまだ
error: (-215) hull.checkVector(1, CV_32S) > 2 in function convexityDefects
ここに問題が見当たらないというエラーが表示されます。

4

2 に答える 2

2

さて、問題は主に、奇妙な理由により、輪郭が小さすぎて、船体が単なる直線(2点のみで構成されることを意味する)であったためです。したがって、エラーは、ベクトルのタイプと関係があると思われる他の投稿を除いて、ハルベクトルのサイズを参照していました。

したがって、に置き換えるだけで
if(contours[i].size() > 3 ) 問題 なくif(hulls[i].size() > 2 ) 動作します。

于 2012-12-10T10:55:17.170 に答える
0

opencvリファレンスで報告されているように:

ConvexityDefects(contour, convexhull, storage) → convexity_defects
  Finds the convexity defects of a contour.

Parameters: 
  contour (CvArr or CvSeq) – Input contour
  convexhull (CvSeq) – Convex hull obtained using ConvexHull2 that should contain pointers or indices to the contour points, not the hull points themselves (the return_points parameter in ConvexHull2 should be 0)
  storage (CvMemStorage) – Container for the output sequence of convexity defects. If it is NULL, the contour or hull (in that order) storage is used

特に、2 番目のパラメータを見てください: ConvexHull2を使用して取得されたものであると確信していますか?

于 2012-12-05T15:02:28.847 に答える