我尝试使用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/