MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
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在文档窗口中显示图像(支持多图片格式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC文件打开格式,MFC默认打开文档后
- 下一篇: Dlib学习笔记:dlib array2