OpenCV窗口绑定到MFC中用以显示视频或图片数据

当使用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);

你可能感兴趣的:(MFC)