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