|
OpenCV讀取圖像顯示在MFC窗口上 1. 在MFC上創(chuàng)建一個(gè)圖片控件,自己修改ID,比如IDC_PICTURE,并且添加對(duì)應(yīng)的變量 CStatic m_PictureControl 2. 在打開(kāi)圖片的按鈕觸發(fā)事件中添加如下代碼: namedWindow("ImageShow", CV_WINDOW_KEEPRATIO); // 用OpenCV創(chuàng)建一個(gè)窗口 m_PictureControl.GetClientRect(&cWindowRect); // 獲取控件窗口大小 int nWindowWidth = cWindowRect.Width(); int nWindowHeight = cWindowRect.Height(); resizeWindow("ImageShow", nWindowWidth, nWindowHeight); hPictureWindow = (HWND)cvGetWindowHandle("ImageShow"); // 獲取OpenCV窗口的句柄 hParentWindow = ::GetParent(hPictureWindow); ::SetParent(hPictureWindow, GetDlgItem(IDC_PICTURE)->m_hWnd); // 關(guān)聯(lián)OpenCV窗口和MFC的控件窗口 ::ShowWindow(hParentWindow, SW_HIDE); GetDlgItem(IDC_PICTURE)->ShowWindow(0); // 開(kāi)始不顯示圖片控件 CFileDialog dlg(TRUE, _T("*,JPG"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("image files (*.jpeg; *.jpg; *.bmp;*.png) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||")); if (IDOK == dlg.DoModal()) m_strPath = dlg.GetPathName(); string strName = CT2A(m_strPath); // CString和string之間的類(lèi)型轉(zhuǎn)換 sourceImage = imread(strName); // m_nChannels = sourceImage.channels(); imshow("ImageShow", sourceImage); GetDlgItem(IDC_PICTURE)->ShowWindow(1); // 顯示圖片控件
3. 在關(guān)閉圖像時(shí),只需要加入如下代碼: GetDlgItem(IDC_PICTURE)->ShowWindow(0); destroyWindow("ImageShow"); // 銷(xiāo)毀窗口
|