Imshow直接显示图像到窗口控件 good!!

本文介绍如何将OpenCV窗口嵌入到MFC界面的PictureControl控件中,并实现鼠标交互功能。通过调整窗口属性及绑定MAT图像,使得OpenCV处理结果能够无缝融入GUI界面,适用于图像处理应用。
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("view", mat);



void CMfcRibbonTemplateView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); //根据控件的大小设置初始帧的大小 CRect rect; GetDlgItem(IDC_PBSRC) ->GetClientRect( &rect ); // 获取控件尺寸位置 m_lframe = Mat::zeros(rect.Height(),rect.Width(),CV_8UC3); GetDlgItem(IDC_PBSRC) ->GetClientRect( &rect ); m_rframe = Mat::zeros(rect.Height(),rect.Width(),CV_8UC3); //绑定Mat到Picturebox上去 namedWindow("src",WINDOW_AUTOSIZE); HWND hWnd = (HWND)cvGetWindowHandle("src"); HWND hParnt = ::GetParent(hWnd); ::SetParent(hWnd,GetDlgItem(IDC_PBSRC)->m_hWnd); ::ShowWindow(hParnt,SW_HIDE); namedWindow("dst",WINDOW_AUTOSIZE); hWnd = (HWND)cvGetWindowHandle("dst"); hParnt = ::GetParent(hWnd); ::SetParent(hWnd,GetDlgItem(IDC_PBDEST)->m_hWnd); ::ShowWindow(hParnt,SW_HIDE); }
 
void CMfcRibbonTemplateView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); CWnd* pwndsrc = GetDlgItem(IDC_PBSRC); CWnd* pwnddst = GetDlgItem(IDC_PBDEST); //计算出长宽,这里的长宽是按照比例的,图像居中显示 int iblank = 15//边界空余 int iwidth = cx/2-iblank*2; int iheight =(int)(iwidth*0.75); if (pwndsrc->GetSafeHwnd() && pwnddst->GetSafeHwnd()){ pwndsrc->MoveWindow(iblank,(cy-iheight)*0.4,iwidth,iheight); pwnddst->MoveWindow(cx/2+iblank,(cy-iheight)*0.4,iwidth,iheight); } }
 
void CMfcRibbonTemplateView::showimage(Mat& src, UINT ID) { if (src.empty()) return; CRect rect; Mat dst = src.clone(); GetDlgItem(ID) ->GetClientRect( &rect ); // 获取控件尺寸位置 if (dst.channels() == 1) cvtColor(dst, dst, CV_GRAY2BGR); resize(dst,dst,Size(rect.Width(),rect.Height())); imshow("src",dst); }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值