這個算法還是存在一些問題趟济,
(一)這個算法的理論依據(jù)是什么?
(二)針對不同的圖像這些參數(shù)如何變化才能做到合適闻牡?
key:cvFindContours 酱塔;cvDrawContours ;CvMemStorage(可認為是單個輪廓儲存器)平项;CvSeq(輪廓儲存器動態(tài)列表)
void CCannyDoc::OnContour() //輪廓檢測
{
//聲明IplImage指針
IplImage * pImg = NULL;
IplImage * pContourImg = NULL;
CvMemStorage * storage = cvCreateMemStorage(0); //內(nèi)存儲存器赫舒,CvMemStorage是結(jié)構(gòu)體
CvSeq * contour = 0; //可動態(tài)增長元素序列
int mode = CV_RETR_CCOMP;
//創(chuàng)建窗口
cvNamedWindow("contour",1);
//載入圖像悍及,強制轉(zhuǎn)化為Gray
pImg = cvLoadImage(i,0);
//為輪廓顯示圖像申請空間
//3通道圖像,以便用彩色顯示
pContourImg = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3); //這里也可以用cvSize(500接癌,500)心赶,表示預(yù)設(shè)一個500*500的空間
cvCvtColor(pImg, pContourImg, CV_GRAY2BGR); //色彩空間裝換,Gray to() RGB
//查找contour
cvFindContours( pImg, storage, &contour, sizeof(CvContour), mode, CV_CHAIN_APPROX_SIMPLE);
//將輪廓畫出缺猛,第三個參數(shù) 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);
}