OpenCV读取图像显示在MFC窗口上

                             OpenCV读取图像显示在MFC窗口上

                 1.   在MFC上创建一个图片控件,自己修改ID,比如IDC_PICTURE,并且添加对应的变量 CStatic m_PictureControl

                 2.   在打开图片的按钮触发事件中添加如下代码:

	namedWindow("ImageShow", CV_WINDOW_KEEPRATIO);          // 用OpenCV创建一个窗口 
	CRect cWindowRect;
	m_PictureControl.GetClientRect(&cWindowRect);           // 获取控件窗口大小
	int nWindowWidth = cWindowRect.Width();
	int nWindowHeight = cWindowRect.Height();
	resizeWindow("ImageShow", nWindowWidth, nWindowHeight);
	hPictureWindow = (HWND)cvGetWindowHandle("ImageShow");        //  获取OpenCV窗口的句柄
	hParentWindow = ::GetParent(hPictureWindow);
	::SetParent(hPictureWindow, GetDlgItem(IDC_PICTURE)->m_hWnd);   //  关联OpenCV窗口和MFC的控件窗口
	::ShowWindow(hParentWindow, SW_HIDE);
	GetDlgItem(IDC_PICTURE)->ShowWindow(0);                        // 开始不显示图片控件
	CFileDialog dlg(TRUE, _T("*,JPG"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("image files (*.jpeg; *.jpg; *.bmp;*.png) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||"));
	if (IDOK == dlg.DoModal())
		m_strPath = dlg.GetPathName();
	string strName = CT2A(m_strPath);              // CString和string之间的类型转换
	sourceImage = imread(strName);
//	m_nChannels = sourceImage.channels();
	imshow("ImageShow", sourceImage);
	GetDlgItem(IDC_PICTURE)->ShowWindow(1);        // 显示图片控件

                3.   在关闭图像时,只需要加入如下代码:

	GetDlgItem(IDC_PICTURE)->ShowWindow(0); 
	destroyWindow("ImageShow");               // 销毁窗口

 

你可能感兴趣的:(图像处理)