分享

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

 行走在理想边缘 2019-05-09

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

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

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

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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多