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

MFC+OpenCV打开图像

2016-04-09 20:27 197 查看
一、打开对话框时直接显示出图像。

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步不同而已。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: