当使用MFC和OpenCV显示图片数据时,很多采用将Mat类型的图片数据转成CvvImage类型,然后在MFC的窗口中进行显示,但是将面临需要额外的头文件CvvImage的问题。而将OpenCV的窗口与MFC中的图片显示控件进行绑定后就不需要CvvImage这个类了,同时有一个额外的好处是可以使用OpenCV的鼠标点击事件了,具体流程如下:
首先在对话框头文件中加入
CRect rect1;
然后在对话框的OnInitDialog()函数下加入:
//绑定窗口
CWnd *pWnd1 = GetDlgItem(IDC_STATIC);//CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。
pWnd1->GetClientRect(&rect1);//GetClientRect为获得控件相自身的坐标大小
namedWindow("src1", WINDOW_AUTOSIZE);//设置窗口名
HWND hWndl = (HWND)cvGetWindowHandle("src1");//hWnd 表示窗口句柄,获取窗口句柄
HWND hParent1 = ::GetParent(hWndl);//GetParent函数一个指定子窗口的父窗口句柄
::SetParent(hWndl, GetDlgItem(IDC_STATIC)->m_hWnd);
::ShowWindow(hParent1, SW_HIDE);//ShowWindow指定窗口中显示
其中IDC_STATIC是MFC中图片控件的ID。
之后就可以随心所欲的使用imshow()函数了,但是窗口名称需要与之前设置的窗口名称一致,本文需要使用imshow("src1",img);