MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
MFC使用OpenCV在文檔窗口中顯示圖像
? ? 【尊重原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處】http://blog.csdn.net/guyuealian/article/details/72550659? ? 在VS2010中新建一個(gè)?MFC單文檔或多文檔的應(yīng)用程序,結(jié)合OpenCV強(qiáng)大的圖像處理工具,我們可以在MFC的“File/open”直接打開(kāi)并顯示圖像,具體方法如下:
(1)首先新建一個(gè)單文檔或多文檔的應(yīng)用程序,項(xiàng)目名:Demo1
(2)在“Demo1Doc.h ”頭文件中包含“#include <opencv2/opencv.hpp>”并聲明Mat變量img
(3)在“Demo1Doc.cpp ”實(shí)現(xiàn)文件中OnOpenDocument方法中添加讀取圖片的代碼(PS:默認(rèn)新建MFC程序是沒(méi)有OnOpenDocument,你可以鼠標(biāo)右鍵,選擇“類向?qū)А?#xff0c;并搜索添加OnOpenDocument函數(shù)即可)
? ? 其中TRACE用來(lái)在Output窗口打印一些信息,這個(gè)在調(diào)試時(shí)才能看到,為了驗(yàn)證圖片解碼是否正常,我們把輸入圖片的長(zhǎng)寬打印了出來(lái)。
? ? 以上兩步都是OpenCV主要的代碼,要想在MFC中顯示Mat矩陣的圖像,還需要結(jié)合GDI+庫(kù),關(guān)于GDI+庫(kù)的使用方法,可以參考網(wǎng)上的資料:http://www.cnblogs.com/pzxbc/archive/2011/11/17/2252490.html
(4)在“Demo1.h ”頭文件中包含“#include <gdiplus.h>”和定義GdiplusStartupInput 和ULONG_PTR 屬性變量
(5)在“Demo1.cpp ”實(shí)現(xiàn)文件中:
在InitInstance 方法中調(diào)用:GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//初始化GDI+庫(kù)
在ExitInstance方法中調(diào)用:GdiplusShutdown(gdiplusToken);//關(guān)閉GDI+
(6)最后在Demo1View.cpp的OnDraw方法中添加顯示代碼
void CDemo1View::OnDraw(CDC* pDC) {CDemo1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼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, //每一行的字節(jié)數(shù) // PixelFormat24bppRGB, pDoc->img.data); Gdiplus::Graphics graphics(pDC->GetSafeHdc()); graphics.DrawImage(&bitmap, 0, 0); }
(7)設(shè)置支持打開(kāi)的圖片格式(如*.jpg;*.bmp)在“資源視圖”中,選擇String Table,找到“IDR_Demo1TYPE”,并修改為: \nDemo1\nDemo1\nDemo1 Files (*.jpg;*.bmp)\n.jpg;.bmp\nDemo1.Document\nDemo1.Document
(8)編譯通過(guò)后運(yùn)行,在MFC中點(diǎn)擊“文件”→“打開(kāi)”→選擇一個(gè)*.bmp或者*.jpg的圖片就可以正常顯示了。
關(guān)于GDI+庫(kù)的使用方法,可參考網(wǎng)上的資料:
【1】《GDI GDI+從入門到精通》:https://chuanke.baidu.com/v1265063-140266-433487.html
【2】《GDI+開(kāi)發(fā)教程》:https://wenku.baidu.com/view/fc83d137f111f18583d05a3e.html
【3】《GDI+ 使用指南》?http://www.cnblogs.com/pzxbc/archive/2011/11/17/2252490.html
總結(jié)
以上是生活随笔為你收集整理的MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MFC文件打开格式,MFC默认打开文档后
- 下一篇: Dlib学习笔记:dlib array2