MFC pictur控件下顯示Mat圖片

20051227192053415142

用MFC寫的上位機總是需要在picture下顯示Mat圖片,方法很多啦,但是不經意間看到一種十分巧妙的方法,實在是讓人感覺優雅之極。感覺十分有必要給大家介紹一下,徵求@jie wu大神的同意,特此分享!

可以把OpenCV的窗口添加到PictureControl裏面,這樣你可以繼續使用OpenCV的setMouseCallback直接對PictureControl進行鼠標操作。
首先在你的OnInit函數中添加如下

namedWindow("view", WINDOW_AUTOSIZE);
HWND hWnd = (HWND) cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_STATIC_CV)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);

上面就是打開一個名爲view的OpenCV窗口,並將其放置到一個ID爲IDC_STATIC_CV的PictureControl裏面,這個控件的類型需要是rectangle。當你在需要顯示某圖片的時候,就像在OpenCV裏面顯示一樣就可以了。

調用imshow顯示前先使用以下代碼適應圖片大小.

CRect rect;
 GetDlgItem(IDC_CV_LEFT)->GetClientRect(&rect);
 cv::Rect dst(rect.left,rect.top,rect.right,rect.bottom);
 cv::resize(mat,mat,cv::Size(rect.Width(),rect.Height())); 

然後顯示圖片的代碼(在程序中只要是顯示“view”窗口,就自動顯示到ID爲IDC_STATIC_CV的picture控件上了):

imshow("view", mat);

作者:jie wu
鏈接:https://www.zhihu.com/question/29611790/answer/45068617
來源:知乎

發佈了45 篇原創文章 · 獲贊 46 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章