MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
来源:互联网 发布:吉他制谱软件 编辑:程序博客网 时间:2024/06/03 18:00
MFC使用OpenCV在文档窗口中显示图像
在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在文档窗口中显示图像(支持多图片格式)
- 使用OpenCV在MFC中显示图像
- 用OpenCV将图像显示在MFC的窗口中
- MFC+Opencv在单文档程序中显示出一幅图像
- VC2010 MFC多文档项目中在带滚动条的窗口中显示图像
- VC2010 MFC多文档项目中在带滚动条的窗口中显示图像
- 在MFC中使用OpenCV,控件显示图像
- 使用GDI+可以方便的把OpenCV的图像矩阵类型数据显示在MFC的窗口中
- 在MFC中显示opencv图像
- MFC中使用openCV显示、处理图像
- MFC中使用OpenCV显示图像
- MFC中使用openCV显示、处理图像
- MFC中使用OpenCV显示摄像头图像
- 继承opencv的CImage类在MFC的单文档中编辑并显示图像
- 彻底解决显示Opencv中Mat图像到Mfc窗口问题
- 在MFC中使用opencv显示图像到MFC的PictureBox控件中
- 在MFC中如何显示OpenCV的图像Mat
- Opencv图像在MFC中显示的几种方法
- vivo部分笔试题(2017提前批)
- 冒泡排序算法
- 【cc2541历程】ds18B20
- Linux 学习(六) --- 文件系统操作命令
- [记录]初学kalman滤波算法
- MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
- 爬取网页后的抓取数据_3种抓取网页数据方法
- arp攻击原理与arp欺骗的原理和应用
- Install MariaDB
- ffmpeg入门基础知识
- C++第5次作业
- 如何在无图形界面的操作系统上使用图形界面软件如sublime text,以及显示图形?
- c头文件
- [提高]ES2015中最惊艳特性之生成器函数初步