以下是最簡(jiǎn)單的圖像處理函數(shù)戏罢,主要是提取邊緣。
void CCannyDoc::OnCanny()
{
IplImage * pImg = NULL;
IplImage * pCannyImg = NULL;
IplImage * pImg1=NULL;
//讀入原始圖像预麸,Cstring i;圖片路徑
pImg = cvLoadImage( i, 0);
//創(chuàng)建一個(gè)八位橱夭,一通道的圖像
pImg1=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);
//高斯平滑 第二個(gè)0為標(biāo)準(zhǔn)差嗤形,pImg為輸出圖像
cvSmooth(pImg,pImg1,CV_GAUSSIAN,3,0,0,0);
//分配新圖的內(nèi)存空間
pCannyImg = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);
//canny邊緣檢測(cè),pCannyImg輸出圖像
cvCanny(pImg1, pCannyImg, 20, 150, 3);
cvNamedWindow("smooth", 1);
cvNamedWindow("canny",1); //創(chuàng)建窗口
cvShowImage( "smooth", pImg1 );
cvShowImage( "canny", pCannyImg ); //顯示圖像
cvWaitKey(0); //等待按鍵,按下0鍵之后窗口關(guān)閉
AfxMessageBox("運(yùn)行通過(guò)標(biāo)志");
cvDestroyWindow( "smooth" );//銷毀窗口
cvDestroyWindow( "canny" );
cvReleaseImage( &pImg1 );
cvReleaseImage( &pCannyImg ); //釋放圖像
cvReleaseImage(&pImg1);
}
BOOL CCannyDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
i=lpszPathName;
IplImage*p=cvLoadImage( lpszPathName, 0);
cvNamedWindow("s", 1); //這里s為窗口的名字
cvShowImage( "s", p );
//cvDestroyWindow( "s" );
//cvReleaseImage( &p );
return TRUE;
}