MFC+OpenCV打开图像

来源:互联网 发布:军工大数据龙头股票 编辑:程序博客网 时间:2024/05/17 23:21

一、打开对话框时直接显示出图像。

1、建立一个基于对话框的工程AppDlg,在对话框中加入一个按钮IDC_CAMERA,标题为“打开图像” ;

2、添加CvvImage类;

3、为AppDlg添加以下public类型的变量:

 CDC* pDC; //显示控件设备上下文  HDC hDC; //显示控件设备句柄 CRect rect;   CvvImage cimg;  cv::Mat image;

4、在对话框中添加Picture控件,为用于显示图像,其ID为IDC_PICTURE

5、为AppDlg添加虚函数OnInitDialog,并加入以下代码:

BOOL CAppDlg::OnInitDialog(){CDialogEx::OnInitDialog();// TODO:  在此添加额外的初始化    pDC = GetDlgItem(IDC_PICTURE)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针      hDC= pDC->GetSafeHdc();    // 获取设备上下文句柄      GetDlgItem(IDC_PICTURE)->GetClientRect(rect); //获取box1客户区  return TRUE; // 异常: OCX 属性页应返回 FALSE}

注意:不能再OnInitDialog里显示图像,此时对话框还没有显示出来。

6、添加WM_PAINT消息,并添加以下代码:

void CHistDlg::OnPaint(){CPaintDC dc(this); // device context for painting// TODO: 在此处添加消息处理程序代码        Mat image = imread("111.jpg"); cimg.CopyOf( &IplImage(image) );  cimg.DrawToHDC(hDC, &rect);  }
此时,在对话框显示的显示的时候,就直接弹出图像111.jpg。这种显示图像的方式有很多应用场合。

【注释】
(1)HDC与CDC

HDC是设备描述句柄,简单的说,HDC就是句柄,是WINDOWS的一种数据类型;

CDC是MFC封装的Windows 设备相关的一个类,封装了几乎所有的关于HDC的操作,简单的说,CDC是MFC里的一个类。
也可以这样说,HDC定义的变量指向一块内存,这块 内存用来描述一个设备的相关的内容,所以也可以认为HDC定义的是一个指针;而CDC类定义一个对象, 这个对象拥有HDC定义的一个设备描述表,同时也包 含与HDC相关的操作的函数。

通过pDC获得hdc句柄:

       HDC hdc=pDC->GetSafeHdc();
(2)为了减少使用IPlImage来定义一副图像(因为有手动释放内存的麻烦),所以,尽量使用Mat来定义图像,使用Mat的IPlImage()方法的直接进行Mat与IPlImage的转化,


二、使用按钮打开图像。

与上述的步骤基本相同,只是第6步不同而已。



0 0
原创粉丝点击