OPENCV中常见算法之二 轮廓提取

这个算法还是存在一些问题,
(一)这个算法的理论依据是什么?
(二)针对不同的图像这些参数如何变化才能做到合适?
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);
}

你可能感兴趣的:(OPENCV中常见算法之二 轮廓提取)