这个算法还是存在一些问题,
(一)这个算法的理论依据是什么?
(二)针对不同的图像这些参数如何变化才能做到合适?
key:cvFindContours ;cvDrawContours ;CvMemStorage(可认为是单个轮廓储存器);CvSeq(轮廓储存器动态列表)
void CCannyDoc::OnContour() //轮廓检测
{
//声明IplImage指针
IplImage * pImg = NULL;
IplImage * pContourImg = NULL;
CvMemStorage * storage = cvCreateMemStorage(0); //内存储存器,CvMemStorage是结构体
CvSeq * contour = 0; //可动态增长元素序列
int mode = CV_RETR_CCOMP;
//创建窗口
cvNamedWindow("contour",1);
//载入图像,强制转化为Gray
pImg = cvLoadImage(i,0);
//为轮廓显示图像申请空间
//3通道图像,以便用彩色显示
pContourImg = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3); //这里也可以用cvSize(500,500),表示预设一个500*500的空间
cvCvtColor(pImg, pContourImg, CV_GRAY2BGR); //色彩空间装换,Gray to() RGB
//查找contour
cvFindContours( pImg, storage, &contour, sizeof(CvContour), mode, CV_CHAIN_APPROX_SIMPLE);
//将轮廓画出,第三个参数 CvSeq ** firstContour
cvDrawContours(pContourImg, contour, CV_RGB(0,0,255), CV_RGB(255, 0, 0), 2, 2, 8);
//显示图像
cvShowImage( "contour", pContourImg );
cvWaitKey(0);
//销毁窗口
cvDestroyWindow( "src" );
cvDestroyWindow( "contour" );
//释放图像
cvReleaseImage( &pImg );
cvReleaseImage( &pContourImg );
cvReleaseMemStorage(&storage);
}