本文是基于工程文件中已经添加了OpenCv库和路径
1、在工程中添加CvvImage.h和CvvImage.cpp(从网上下载);
2、在Doc.h文件中 添加头文件#include <highgui.h>和#include "CvvImage.h" 以及成员变量(以m_Image为例);
在Doc.cpp中,利用MFC向导 添加两个virual function:
@1 OnOpenDocument() : 在该函数内添加
m_Image.Load(lpszPathName);
若参数不匹配,修改字符集,使用Multi-byte
@2 OnSaveDocument() : 在该函数内添加
CFileDialog dlg ( TRUE ) ;
if ( dlg.DoModal() == IDOK )
{
m_image.Save(dlg.GetPathName());
}
//
return TRUE;
注释掉 //return CDocument::OnSaveDocument(lpszPathName);
3、在View.cpp中 添加 CvvImage.h
在OnDraw中添加
CvvImage &img=pDoc->m_image;
CRect r;
GetClientRect (&r);
img.DrawToHDC(pDC->GetSafeHdc() ,r);
至此,可以在MFC中通过OpenCv打开和保存图像了
下面是一个例子:添加一个Canny边缘检测的方法
1、在资源菜单上添加菜单按键,右键添加句柄 Event Handler (Class List选择Doc)
2、在第一部中自动生成的处理处理函数内,添加
IplImage* img;
img=m_Image.GetImage();
if(img->nChannels==3)
{
IplImage* dst = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvCvtColor(img,dst,CV_BGR2GRAY);
*img=*dst;
}
cvCanny(img,img,50,150,3);
UpdateAllViews(NULL);
这样就能使用菜单对图像进行边缘检测了。