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"); // 销毁窗口
联系客服