Не работает Opencv cvDrawContours

#c #drawing

#c #рисование

Вопрос:

Я пытался нарисовать контур с вектором CvPoint при использовании cvDrawContours, он не рисует контур на изображении, но cvDrawRect работает отлично. пожалуйста, объясните, есть ли какая-либо ошибка в следующем коде.

  IplImage *iplMaskKeyPoints = cvCreateImage(cvGetSize(iplObjGrey),iplObjGrey->depth,1);
 CvMemStorage *msObjImgStorage = cvCreateMemStorage(0);
 CvSeq* sqObjImgPoly = cvCreateSeq(CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), msObjImgStorage );
 cvZero(iplMaskKeyPoints);
 for(int i = 0; i < (int)vecObjPoly.size(); i   )
 {
    CvPoint pt = vecObjPoly[i];
    cvSeqPush(sqObjImgPoly, amp;pt );
 }
cvDrawContours(iplMaskKeyPoints,sqObjImgPoly,cvScalar(255,255,255),cvScalar(255,255,255),1,CV_FILLED);
cvShowImage("output",iplMaskKeyPoints);
cvWaitKey(0);
if(sqObjImgPoly != NULL)
        {
            cvClearSeq(sqObjImgPoly);
            sqObjImgPoly = NULL;
        }
        if(msObjImgStorage != NULL)
        {
            cvClearMemStorage(msObjImgStorage);
            cvReleaseMemStorage(amp;msObjImgStorage);
        }
vecObjPoly.clear();
cvReleaseImage(amp;iplMaskKeyPoints);
  

Ответ №1:

Я запустил этот код, но здесь, в 3 строке cvCreateSeq первого параметра, пожалуйста, добавьте этот флаг CV_SEQ_KIND_CURVE для рисования контура

замените строку 3 следующим образом.

 CvSeq* sqObjImgPoly = cvCreateSeq( CV_32SC2 | CV_SEQ_KIND_CURVE, sizeof(CvSeq), sizeof(CvPoint), msObjImgStorage );