如何将一张图像(Mat类型或者IplImage* 类型)显示到指定图像控件中?经过一系列探索,解决方法如下:
OpenCV程序在MFC中实现的方法通常是采用CvvImage类,这个类的成员函数DrawToHDC可将位图整体经缩放后显示到视图窗口中,但是我的opencv版本为2.4.9,没有这个类,因此需要手动添加”CvvImage.h”和”CvvImage.cpp”.这个自己可以在网上自行下载。
那如何将IplImage*类型的图像转化为CvvImage类型呢,很简单,因为CvvImage类有CopyOf(IplImage*)函数。代码如下:
void ImageShow(IplImage* img,UINT ID){
CDC *pDC=GetDlgItem(ID)->GetDC();//获得显示控件的DC
HDC hDC=pDC->GetSafeHdc();//获取设备句柄来进行绘图操作
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf(img);
cimg.DrawToHDC(hDC,&rect);
ReleaseDC(pDC);
}
如果要显示Mat类型呢,可以先将Mat类型转换为IplImage类型,再转换为CvvImage类型:
void ImageShow(Mat img, UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();//获得显示控件的DC
HDC hDC = pDC->GetSafeHdc();//获取设备句柄来进行绘图操作
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg;
IplImage img_temp = IplImage(img);//转化为IplImage类型
cimg.CopyOf(&img_temp);
cimg.DrawToHDC(hDC, &rect);
ReleaseDC(pDC);
}