Дефекты выпуклости C ++ OpenCv

Я был бы благодарен вам, если бы вы помогли мне с этой проблемой :)

Относительно этого вопроса cvConvexityDefects в OpenCV 2.X / C ++? , У меня та же проблема. Оболочка OpenCV C ++ не имеет функции cvConvexityDefects, которая присутствует в версии C, поэтому я попытался написать свою собственную версию.

Часть кода (обратите внимание, что countour и hull являются векторными , рассчитанными отдельно:

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

Результат: Выпуклая оболочка должна быть представлена ​​как последовательность индексов или последовательность указателей в функции cvConvexityDefects . На самом деле я не знаю, как правильно выполнять преобразование, я искал в Интернете и попытался адаптировать / скопировать / понять некоторые фрагменты кода, но это всегда с синтаксисом C.

Надеюсь, все понятно. Заранее спасибо!

11
задан Community 23 May 2017 в 12:26
поделиться