不多说,上代码:
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contour = 0;
int flag = 0;
cvFindContours(s_img, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
for( ; contour != 0; contour = contour->h_next )
{
double tmparea = fabs(cvContourArea(contour));
if (tmparea != 0.0)
cout<<"area: "<<tmparea<<endl;
if(tmparea >= 200)
{
cout<<"t_area: "<<tmparea<<endl;
flag = 1;
break;
}
}
cvReleaseMemStorage(&storage);
良好的代码习惯:
CvMemStorage* storage 对应着 cvReleaseMemStorage(&storage);。
如果最后没有cvReleaseMemStorage,代码绝壁是有内存问题的。
IplImage * 很老了,一些C代码的工程里偶尔还能够看到。
上代码:
IplImage *hsv_img = cvCreateImage(cvGetSize(image), 8 , 3);
IplImage *h_img = cvCreateImage(cvGetSize(image), 8, 1);
IplImage *s_img = cvCreateImage(cvGetSize(image), 8, 1);
IplImage *v_img = cvCreateImage(cvGetSize(image), 8, 1);
cvCvtColor(image, hsv_img, CV_BGR2HSV);
cvSplit(hsv_img, h_img, s_img, v_img, NULL);
//
//
//
cvReleaseImage(&hsv_img);
cvReleaseImage(&h_img);
cvReleaseImage(&s_img);
cvReleaseImage(&v_img);
良好的代码习惯:
IplImage *img的声明后,最后一定要cvReleaseImage(&img),不然你的工程也铁定要GG的。
本文详细介绍了使用OpenCV进行轮廓检测的过程,包括创建内存存储、查找图像中的轮廓、计算轮廓面积,并展示了如何通过面积筛选有效轮廓。此外,文章还强调了良好的代码习惯,如及时释放内存和图像资源,以避免内存泄漏。
835

被折叠的 条评论
为什么被折叠?



