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

OpenCV 同时被 3 个专栏收录
33 篇文章 17 订阅
27 篇文章 3 订阅
25 篇文章 4 订阅

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.cppOnDraw方法中添加显示代码

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

  • 2
    点赞
  • 1
    评论
  • 16
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值