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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章