VS2017 MFC的Picture Control控件显示opencv3.3图片的方法
2017-12-27 11:22
2201 查看
环境:Win10 Vs2017 opencv3.3
文中涉及
MatToCImage(rgbImageL1, rgbImageL2);//OpenCV中Mat对象转MFC的CImage类的函数
见我另一篇博文OpenCV中Mat对象转MFC的CImage类的函数
http://blog.csdn.net/weixin_39449570/article/details/78901208
方法一:
下面是实现图片显示的程序,亲测可用:int cxl, cyl; Mat rgbImageL1;//opencv图片 CImage rgbImageL2; CRect rectl, pic_rectl; int widthl, heightl; //改变图片大小适应picture控件 GetDlgItem(IDC_pl)->GetClientRect(&pic_rectl); widthl = pic_rectl.right; heightl = pic_rectl.bottom; resize(rgbImageL, rgbImageL1, Size(widthl, heightl)); MatToCImage(rgbImageL1, rgbImageL2);//OpenCV中Mat对象转MFC的CImage类的函数(见我另一篇博文) //获取图片的宽 高度 cxl = rgbImageL2.GetWidth(); cyl 4000 = rgbImageL2.GetHeight(); //获取Picture Control控件的大小 GetDlgItem(IDC_pl)->GetWindowRect(&rectl); //将客户区选中到控件表示的矩形区域内 ScreenToClient(&rectl); //窗口移动到控件表示的区域 GetDlgItem(IDC_pl)->MoveWindow(rectl.left, rectl.top, cxl, cyl, TRUE); CWnd *pWnd = NULL; pWnd = GetDlgItem(IDC_pl);//获取控件句柄 pWnd->GetClientRect(&rectl);//获取句柄指向控件区域的大小 CDC *pDc = NULL; pDc = pWnd->GetDC();//获取picture的DC rgbImageL2.Draw(pDc->m_hDC, rectl);//将图片绘制到picture表示的区域内 ReleaseDC(pDc);
方法二:
也可以把OpenCV的窗口添加到PictureControl里面,这样你可以继续使用OpenCV的setMouseCallback直接对PictureControl进行鼠标操作。首先在你的:OnInitDialog()函数中添加如下
namedWindow("disparity", WINDOW_AUTOSIZE); HWND hWnd = (HWND)cvGetWindowHandle("disparity"); HWND hParent = ::GetParent(hWnd); ::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd); ::ShowWindow(hParent, SW_HIDE);
上面就是打开一个名为view的OpenCV窗口,并将其放置到一个ID为IDC_STATIC的PictureControl里面,这个控件的类型需要是rectangle。当你在需要显示某图片的时候,就像在OpenCV里面显示一样就可以了。
在主程序里添加如下:
//改变图片大小适应picture控件 CRect pic_rect; int width, height; GetDlgItem(IDC_STATIC)->GetClientRect(&pic_rect); width = pic_rect.right; height = pic_rect.bottom; resize(color, color1, Size(width, height)); imshow("disparity", color1);
方法二优缺点:
把OpenCV的窗口添加到PictureControl里面,这样你可以继续使用OpenCV的setMouseCallback直接对PictureControl进行鼠标操作。
在使用窗体打开时会有黑窗口闪烁,应该是namedWindow的作用。
初始化时会将picture刷为灰色。
本人更倾向于使用方法二!
相关文章推荐
- vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control
- 在 MFC 框架中,有什么方法能直接将 OpenCV 2.0 库中 Mat 格式的图片传递到 Picture Control(图片控件)显示?
- VS2013 MFC 直接将 OpenCV2.0/3.0 库中的 Mat 结构的图像传递到 Picture Control(图片控件)
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中
- MFC中 利用OpenCv显示图片到Picture Control控件
- 知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
- c++ opencv 3.2 +Mfc VS2015窗体显示图片方法
- 【C++ MFC+opencv】打开文件夹中的图片并在picture控件中显示
- VS2013 MFC使用opencv3.0显示图片
- Opencv在MFC客户端的Picture控件上显示图片
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- mfc控件中显示opencv图片
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- MFC+OpenCV 利用Show方法使图像不拉伸显示在Picture控件上
- opencv中的图片对象显示在mfc控件中
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- MFC 对话框中的picture control 控件显示图片