我尝试使用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, &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(&msObjImgStorage);
        }
vecObjPoly.clear();
cvReleaseImage(&iplMaskKeyPoints);

最佳答案

我已经运行了此代码,但是在第3行cvCreateSeq的第一个参数上,请添加此标志CV_SEQ_KIND_CURVE以绘制轮廓

像这样替换第3行。

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

关于c++ - OpenCV cvDrawContours不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24603509/

10-10 16:42