Opencv 将cvFindContour与CVMinareRect2一起使用
我成功地使用了cvDrawContour,但当我尝试使用cvMinRectArea2时,它只显示一个点。有什么想法吗?这是源代码Opencv 将cvFindContour与CVMinareRect2一起使用,opencv,Opencv,我成功地使用了cvDrawContour,但当我尝试使用cvMinRectArea2时,它只显示一个点。有什么想法吗?这是源代码 IplImage *src = cvLoadImage("SignImg.jpg",0); IplImage *dst_img = 0; IplImage *img = cvCreateImage(cvGetSize(src),8,3); CvBox2D rect; CvMem
IplImage *src = cvLoadImage("SignImg.jpg",0);
IplImage *dst_img = 0;
IplImage *img = cvCreateImage(cvGetSize(src),8,3);
CvBox2D rect;
CvMemStorage *storage = cvCreateMemStorage ();
CvSeq *contours = 0;
char a[255];
sprintf(&a[0],"%s",openFileDialog1->FileName);
dst_img = cvLoadImage(a,0);
cvFindContours (src, storage, &contours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE ,cvPoint(0,0));
cvCvtColor(dst_img,img,CV_GRAY2BGR);
cvDrawContours (img, contours, CV_RGB(255,0,0), cvScalarAll(255),1,1,8,cvPoint(0,0));
rect=cvMinAreaRect2 (contours,0);
cvEllipseBox(img,rect,cvScalarAll(0),5,8,0);
正确的使用方法如下所示:
for( ; contour != 0; contour = contour->h_next )
{
CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
/* replace CV_FILLED with 1 to see the outlines */
cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 );
}
如果不够明显,您的变量
等高线
就是一个数组,您需要迭代它并绘制每个元素!否则,您将只绘制阵列的第一个元素。这样,您只绘制图像中获得的第一个轮廓。你应该把它画在一个单独的空白图像上,看看它是否也覆盖在另一个颜色相同的零件上,这样它就不可见了。谢谢你的回复。我需要在这些点周围画一个矩形。我如何包装它们?