以下是最简单的图像处理函数,主要是提取边缘。
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;
}