不多说,上代码:
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的。