OPENCV中的常见算法之一 CANNY

以下是最简单的图像处理函数,主要是提取边缘。

void CCannyDoc::OnCanny()
{
 
   IplImage * pImg = NULL;
   IplImage * pCannyImg = NULL;
   IplImage * pImg1=NULL;
   //读入原始图像,Cstring i;图片路径
   pImg = cvLoadImage( i, 0); 

//创建一个八位,一通道的图像
 pImg1=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);          
//高斯平滑 第二个0为标准差,pImg为输出图像 
cvSmooth(pImg,pImg1,CV_GAUSSIAN,3,0,0,0);                     

//分配新图的内存空间
 pCannyImg = cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);   

//canny边缘检测,pCannyImg输出图像 
 cvCanny(pImg1, pCannyImg, 20, 150, 3);                        
    cvNamedWindow("smooth", 1);
    cvNamedWindow("canny",1);     //创建窗口
    cvShowImage( "smooth", pImg1 );
    cvShowImage( "canny", pCannyImg ); //显示图像
 cvWaitKey(0);   //等待按键,按下0键之后窗口关闭
AfxMessageBox("运行通过标志");
 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;
}

你可能感兴趣的:(OPENCV中的常见算法之一 CANNY)