如果你能帮我解决这个问题,我将不胜感激:)
关于这个问题OpenCV 2.X/C++中的cvConvexityDefects?,我有同样的问题.OpenCV的C++包装器没有C版本出现的函数cvConvexityDefects,所以我试着写了自己的版本.
部分代码是(请注意countour和hull都是vector
Part of the code is (please note that both countour and hull are vector< Point >,calculated separately :
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,contourStr); printf("Metiendo valores "); 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,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);
输出是凸包必须表示为函数cvConvexityDefects中的索引序列或指针序列.我真的不知道如何以正确的方式进行转换,我一直在网上搜索并尝试改编/复制/理解一些代码,但它总是使用 C 语法.
我希望我说的很清楚.提前谢谢你!