基于MFC单文档下调用opencv库并将图片效果显示在单文档窗口
2016-12-14 08:32
501 查看
对比于网络上的MFC对话框显示图像处理的效果,按下控件就会有对话框的弹出,为此为了美观和方便,便制作了基于单文档调用opencv库的方式,并使图片处理效果一直悬浮在单文档的窗口中。 opencv库对于二维图像处理有着极大的方便,此篇博客主要是为了实现opencv库与MFC单文档的较为完整的配合。
在新的单文档中用opencv显示图像,主要用到了cvvImage类,[b]cvvImage类包装了IplImage结构并提供了一些相关操作的函数,在C项目名view.h头文件中引用cvvImage.h头文件,同时须在头文件和源文件中添加cvvImage.h和cvvImage.cpp文件。在[b]C项目名view.h头文件加入cvvImage对象。[/b][/b]
[b][b]代码如下:[/b][/b]
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边缘检测:
还有一些其他变换就不一一演示了;
[b] [/b]
代码在上传资源中:http://download.csdn.net/my
在新的单文档中用opencv显示图像,主要用到了cvvImage类,[b]cvvImage类包装了IplImage结构并提供了一些相关操作的函数,在C项目名view.h头文件中引用cvvImage.h头文件,同时须在头文件和源文件中添加cvvImage.h和cvvImage.cpp文件。在[b]C项目名view.h头文件加入cvvImage对象。[/b][/b]
[b][b]代码如下:[/b][/b]
private: cvvImage image;
为了实现能打开任意图像不同的图片格式,在打开图像函数::OnOpen()中添加如下代码:
显示图像便在view::OnDraw()中添加如下代码:CopencvtuxiangDoc* pDoc = GetDocument();{ // TODO: 在此添加命令处理程序代码 CFileDialog dlg(TRUE, _T(".jpg"), _T(".jpg"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("JPEG 图像文件|*.jpg|位图文件|*.bmp| \GIF 图像文件|*.gif|PNG 图像文件|*.png||")); if (dlg.DoModal() == IDOK) { CString m_FilePath = dlg.GetPathName(); char * path = (LPSTR)(LPCTSTR)m_FilePath; IplImage * Input_Img = cvLoadImage((CT2CA)m_FilePath, CV_LOAD_IMAGE_COLOR); cimg.CopyOf(Input_Img); Mat img=Input_Img; imwrite("yuantu.jpg", img ); // if (cimg.GetImage()!=NULL) // { // cimg.Destroy(); // } // cimg.Load((CT2CA)m_FilePath); //} // } //CString m_strPicPath; // IplImage* TheImage; // CFileDialog dlg(true,_T("*.bmp"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, // _T("image file(*.bmp;*.jpg)|*.bmp;*.jpg|All Files(*.*)|*.*|"),NULL); //弹出选择图片对话框 // dlg.m_ofn.lpstrTitle=_T("open Image"); // if(dlg.DoModal()!=IDOK) // return ; // m_strPicPath = dlg.GetPathName(); // m_strPicPath.Replace(_T("//"),_T("////")); // TheImage=cvLoadImage((CT2CA)m_strPicPath,1); Invalidate(); }
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边缘检测:
还有一些其他变换就不一一演示了;
[b] [/b]
代码在上传资源中:http://download.csdn.net/my
相关文章推荐
- Shader之Photoshop Color效果
- SEO之HTML优化:让你的网站HTML代码更符合SEO规范
- hadoop-impala十大优化之(6)—控制资源使用最佳实践
- 登录式shell与非登录式shell
- Linux系统启动的过程
- LBaaS 实现机制 - 每天5分钟玩转 OpenStack(125)
- LBaaS 实现机制 - 每天5分钟玩转 OpenStack(125)
- LBaaS 实现机制 - 每天5分钟玩转 OpenStack(125)
- hadoop实例网址
- 关于MFC OpenGL环境配置的一点总结
- Apache 源码包安装以及出现一些问题的解决 汇总
- Apache 源码包安装以及出现一些问题的解决 汇总
- .attr(),.prop()和.data()的区别
- Shell脚本调用java程序 Example
- Mac下dd命令制作Centos USB启动盘
- 9. Linux 磁盘与文件管理系统(inode 目录)
- [linux]资料收纳
- LINUX 常用命令 ps 详解
- 分布式内存组织框架Apache Ignite 资源分享
- 问题记录(持续更新)