OpenCV的窗口添加到PictureControl里面,这样你可以继续使用OpenCV的setMouseCallback直接对PictureControl进行鼠标操作。
首先在你的OnInit函数中添加如下
上面就是打开一个名为view的OpenCV窗口,并将其放置到一个ID为IDC_STATIC_CV的PictureControl里面,这个控件的类型需要是rectangle。当你在需要显示某图片的时候,就像在OpenCV里面显示一样就可以了。
首先在你的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);
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);
}

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

889

被折叠的 条评论
为什么被折叠?



