この問題について私を助けていただければ幸いです:)
この質問に関連して、OpenCV 2.X / C ++のcvConvexityDefects?、 私も同じ問題を抱えてる。OpenCV C ++ラッパーには、Cバージョンに表示される関数cvConvexityDefectsがないため、独自のバージョンを作成しようとしました。
コードの一部は次のとおりです(countourとhullの両方がvector <Point>であり、別々に計算されることに注意してください:
CvSeq* contourPoints;
CvSeq* hullPoints;
CvSeq* defects;
CvMemStorage* storage;
CvMemStorage* strDefects;
CvMemStorage* contourStr;
CvMemStorage* hullStr;
CvConvexityDefect *defectArray = 0;
strDefects = cvCreateMemStorage();
defects = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvSeq),sizeof(CvPoint), strDefects );
//We start converting vector<Point> resulting from findContours
contourStr = cvCreateMemStorage();
contourPoints = cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), contourStr);
printf("Metiendo valores\n");
for(int i=0; i<(int)contour.size(); i++) {
CvPoint cp = {contour[i].x, contour[i].y};
cvSeqPush(contourPoints, &cp);
}
//Now, the hull points obtained from convexHull c++
hullStr = cvCreateMemStorage(0);
hullPoints = cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), hullStr);
for(int i=0; i<(int)hull.size(); i++) {
CvPoint cp = {hull[i].x, hull[i].y};
cvSeqPush(hullPoints, &cp);
}
//And we compute convexity defects
storage = cvCreateMemStorage(0);
defects = cvConvexityDefects(contourPoints, hullPoints, storage);
出力はConvex hull must represented as a sequence of indices or sequence of pointers in function cvConvexityDefects
です。本当に正しい方法で変換を行う方法がわかりません。Webで検索して、コードの一部を適応/コピー/理解しようとしましたが、常にC構文を使用しています。
はっきりしていたと思います。前もって感謝します!