对比于网络上的MFC对话框显示图像处理的效果,按下控件就会有对话框的弹出,为此为了美观和方便,便制作了基于单文档调用opencv库的方式,并使图片处理效果一直悬浮在单文档的窗口中。 opencv库对于二维图像处理有着极大的方便,此篇博客主要是为了实现opencv库与MFC单文档的较为完整的配合。
在新的单文档中用opencv显示图像,主要用到了cvvImage类,cvvImage类包装了IplImage结构并提供了一些相关操作的函数,在C项目名view.h头文件中引用cvvImage.h头文件,同时须在头文件和源文件中添加cvvImage.h和cvvImage.cpp文件。在C项目名view.h头文件加入cvvImage对象。
代码如下:
private: cvvImage image;为了实现能打开任意图像不同的图片格式,在打开图像函数::OnOpen()中添加如下代码:
显示图像便在view::OnDraw()中添加如下代码:
显示效果如下:CopencvtuxiangDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; if(cimg.GetImage()!=NULL) { CRect r; GetClientRect(&r); SetRect(r, 0, 0, cimg.Width(), cimg.Height()); //将cimg显示出来 cimg.DrawToHDC(pDC->GetSafeHdc(), r); //cimg.Destroy(); // TODO: 在此处为本机数据添加绘制代码 }
之后还将一些opencv关于图像处理的函数调用进去,实现一个个功能变换,先将打开的原图写入inwrite到“yuantu”中,之后再进行读出inread。
例如canny边缘检测:
还有一些其他变换就不一一演示了;
代码在上传资源中:http://download.csdn.net/my