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);
}