MFC中Mat实现打开本地图片
生活随笔
收集整理的這篇文章主要介紹了
MFC中Mat实现打开本地图片
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
實(shí)現(xiàn)思想:將opencv的窗口貼到MFC的圖片控件上去。
顯示圖片路徑ID:IDC_IMG_PATH
圖片Static Text的ID:IDC_STATIC_IMG
代碼:
// LoadImageDlg.cpp : 實(shí)現(xiàn)文件
//#include "stdafx.h"
#include "LoadImage.h"
#include "LoadImageDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif//該程序用到的頭文件
#include <opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;//該程序用到的變量
CString cstr;
string str;
Mat frame;HWND viewhWnd = NULL;
HWND hParent = NULL;
void CLoadImageDlg::OnBnClickedButtonLoadimage()
{//準(zhǔn)備環(huán)境//destroyAllWindows(); //銷毀所有的窗口cvDestroyWindow("myshowWnd");//銷毀窗口SetDlgItemText(IDC_IMG_PATH," "); //清空路徑// TODO: 在此添加控件通知處理程序代碼CFileDialog dlg(TRUE,"*.*","*.*", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp|文件(*.*)|*.*|",NULL); if(dlg.DoModal()==IDOK) { SetDlgItemText(IDC_IMG_PATH,dlg.GetPathName()); cstr = dlg.GetPathName();str = LPCSTR(cstr); //CString->stringnamedWindow("view", WINDOW_AUTOSIZE);viewhWnd = (HWND)cvGetWindowHandle("view");hParent = ::GetParent(viewhWnd);::SetParent(viewhWnd, GetDlgItem(IDC_STATIC_IMG)->m_hWnd);::ShowWindow(hParent, SW_HIDE);//SW_HIDE:隱藏運(yùn)行程序框,并且把它“畫”到MFC上frame = imread(str);if (!frame.empty()){//適應(yīng)于窗口大小顯示圖片CRect rc;CWnd *pWnd = GetDlgItem(IDC_STATIC_IMG);//IDC_PIC_2D為控件IDpWnd->GetClientRect(&rc);//rc為控件的大小。int x=rc.Height();int y=rc.Width();resize(frame,frame,Size(y,x)); //改變圖片尺寸輸出在picture控件上imshow("view", frame);}}
}
結(jié)果圖:
總結(jié)
以上是生活随笔為你收集整理的MFC中Mat实现打开本地图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MFC中Mat实现打开关闭本地摄像头
- 下一篇: 第15章:启动管理