MFC使用OpenCV在文档窗口中显示图像

    【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/72550659

在VS2010中新建一个 MFC单文档或多文档的应用程序,结合OpenCV强大的图像处理工具,我们可以在MFC的“File/open”直接打开并显示图像,具体方法如下:

(1)首先新建一个单文档或多文档的应用程序,项目名:Demo1
(2)在“Demo1Doc.h ”头文件中包含“#include <opencv2/opencv.hpp>”并声明Mat变量img

(3)在“Demo1Doc.cpp ”实现文件中OnOpenDocument方法中添加读取图片的代码(PS:默认新建MFC程序是没有OnOpenDocument,你可以鼠标右键,选择“类向导”,并搜索添加OnOpenDocument函数即可)

其中TRACE用来在Output窗口打印一些信息,这个在调试时才能看到,为了验证图片解码是否正常,我们把输入图片的长宽打印了出来。

以上两步都是OpenCV主要的代码,要想在MFC中显示Mat矩阵的图像,还需要结合GDI+库,关于GDI+库的使用方法,可以参考网上的资料:http://www.cnblogs.com/pzxbc/archive/2011/11/17/2252490.html

(4)在“Demo1.h ”头文件中包含“#include <gdiplus.h>”和定义GdiplusStartupInput 和ULONG_PTR 属性变量

(5)在“Demo1.cpp ”实现文件中:

在InitInstance 方法中调用:GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//初始化GDI+库

在ExitInstance方法中调用:GdiplusShutdown(gdiplusToken);//关闭GDI+

(6)最后在Demo1View.cpp的OnDraw方法中添加显示代码

void CDemo1View::OnDraw(CDC* pDC)
{CDemo1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码cv::Mat newImage;  if (pDoc->img.channels() == 1)  {  cv::cvtColor(pDoc->img, newImage, CV_GRAY2BGRA);  }  else if (pDoc->img.channels() == 3)  {  cv::cvtColor(pDoc->img, newImage, CV_BGR2BGRA);  }  else  {  newImage = pDoc->img;  }  Gdiplus::Bitmap bitmap(newImage.cols, newImage.rows, newImage.step1(), PixelFormat32bppARGB, newImage.data);  //Gdiplus::Bitmap bitmap(pDoc->img.cols, pDoc->img.rows, pDoc->img.step, //每一行的字节数  //  PixelFormat24bppRGB, pDoc->img.data);  Gdiplus::Graphics graphics(pDC->GetSafeHdc());  graphics.DrawImage(&bitmap, 0, 0);
}

(7)设置支持打开的图片格式(如*.jpg;*.bmp)在“资源视图”中,选择String Table,找到“IDR_Demo1TYPE”,并修改为:

\nDemo1\nDemo1\nDemo1 Files (*.jpg;*.bmp)\n.jpg;.bmp\nDemo1.Document\nDemo1.Document

(8)编译通过后运行,在MFC中点击“文件”→“打开”→选择一个*.bmp或者*.jpg的图片就可以正常显示了。

关于GDI+库的使用方法,可参考网上的资料:

【1】《GDI GDI+从入门到精通》:https://chuanke.baidu.com/v1265063-140266-433487.html

【2】《GDI+开发教程》:https://wenku.baidu.com/view/fc83d137f111f18583d05a3e.html

【3】《GDI+ 使用指南》http://www.cnblogs.com/pzxbc/archive/2011/11/17/2252490.html

MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)相关推荐

  1. 在单文档窗口中添加背景图片

    改变视图单调的背景 下载代码工程 1; 我们在用Visual C++写程序时,会看到她自动产生的界面背景非常的单调,我们可以自己来改变这个问题来实现美丽的背景,希望本文对初学者有所帮助. 本文代码运行 ...

  2. AutoCAD .Net 使用 Database.ReadDwgFile 读取dwg文件而不显示文档窗口

    我们常常会碰到需要读取外部的 dwg 文件,而又不想在 AutoCAD 的文档窗口中显示. AutoCAD .Net API 提供了 Database.ReadDwgFile 来实现. 我们首先需要构 ...

  3. 使用MFC自动化操作Excel文档

    使用MFC自动化操作Excel文档 项目中要用到MFC操作Excel文件,在网上搜的结果,有把Excel当数据库处理的,也有直接操作Excel的,最终在MSDN上看到的结果,测试后觉得好用些. 使用基 ...

  4. html 文档结构图,怎么在文档结构图中显示目录,怎样显示文档结构图

    一般我们的文档显示中会看到两类格式,一种是内置标题的格式还有一种是大纲段落格式,这个时候我们使用文档结构图就可以更加方便的了解文档的结构,还可以加快我们的阅读时间,那么究竟怎么设置文档结构图呢,让小编 ...

  5. 定制MFC多文档窗口的主框架背景

    问题描述: 如上图所示,这是用MFC创建的多文档程序,可以看到主框架的背景区是灰色的,如果我要在这块区域贴一张图片,应该怎么办呢?最容易想到的是在CMainFrame的OnPaint中对背景进行更改, ...

  6. MFC让文档/视图结构程序支持滚动条

    MFC让文档/视图结构程序支持滚动条 2009-06-30 09:26要通过滚动条显示文档,还必须知道文档滚动到了什么位置:一旦用户拖动滚动条时要告诉视图改变在文档中 的位置.所有这些,由MFC的CS ...

  7. MFC应用程序框架-文档/视结构

    MFC应用程序框架-文档/视结构 1.MFC单文档应用程序结构 2.文档对象 2.1基类CDocument 2.2在应用程序中使用文档类的典型步骤 3.视的对象 3.1基类CView 3.2常用的CV ...

  8. 给多文档窗口添加背景图片

    VC是一个功能强大的可视化的开发工具,但是用VC做的标准界面与Windows一样色彩灰 暗单调,例如多文档窗口应用程序中的主框架窗口的背景便是如此.那么能否给主框架窗 口的背景改变一下色彩或是给主框架 ...

  9. clion 查看内容窗口_了解Photoshop文档窗口(3)

    在Abode Photoshop的文档窗口中,它可以同时打开多个图像,并随意操作各个窗口图像,也可以按照前后顺序切换窗口,下面来详细了解一下文档窗口吧. 封面设计丨Sweety 责编丨花花 第3篇丨P ...

最新文章

  1. 数学公式太晦涩,不如用代码写出来:这是程序员学数学的独特方式
  2. 读《大道至简-- 第二章 是懒人造就了方法》 有感
  3. [BJDCTF 2nd]8086(异或脚本解题)
  4. nginx location匹配优先级_一分钟搞清楚:Nginx之Location优先级
  5. android解析ip地址,android – 如何从IP地址解析网络主机名
  6. mysql5.17免安装教程_详细介绍MySql5.7.17免安装配置教程的示例代码
  7. 算法小白——基本排序算法入门
  8. mysql为何不支持开窗函数?
  9. request.get_full_path() 和request.path区别
  10. linux读写进程内存函数,Linux内核模块里的读写函数
  11. 蔡高厅高等数学18-函数在一点处的连续、函数在区间内的连续、两类间断点的判断
  12. 教妹学Java(十一):操作符简介
  13. Redis通信协议和集群通信算法
  14. 怎么用计算机ping组播地址,windows – 使用’目标主机无法访问’从同一台计算机ping“回复”(没有到其他计算机的路由)...
  15. 【CF335 E】Counting Skyscrapers
  16. Ubiquitous Religions 并查集
  17. mysql数据同构_异构、同构 异步、同步
  18. 在此处打开命令窗口 (Open command window here)
  19. 自动化之RPA工具之影刀
  20. c语言传感器串口通信,树莓派上使用C语言检测触碰传感器

热门文章

  1. WordPress快速打造个人博客
  2. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  3. Spark任务执行期间写临时文件报错导致失败
  4. 安装deepin linux
  5. 在ubuntu16下安装virtualenv+virtualenvwrapper
  6. 策略模式(策略不同类,场景不同策略不同,环境策略分离组合)
  7. HDU 3534 Tree (经典树形dp)
  8. iPhone开发进阶(1) --- 深入理解iPhone OS/SDK与Objective-C 2.0
  9. MySQL相关常用命令
  10. 鲍姆-韦尔奇算法 数学推导