您的位置:首页 > 运维架构

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刷为灰色。

本人更倾向于使用方法二!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 控件 mfc 函数 opencv