要使用mfc图片控件显示本地图片,有两种方法。
1.利用CvvImage和IplImage 格式的图片,将其输出到控件中。
2.将opencv窗口嵌入到图片控件中,直接显示opencv格式的图片
方法1:需要用到
#include <opencv2/opencv.hpp>;
using namespace cv;
以及cvvimage.h,cvvimage.h&cpp在opencv后续版本没有,需要在网上找到代码手动添加进去。
按钮事件函数添加如下代码
void CMFCApplication2Dlg::OnBnClickedButton3()
{
IplImage*src = cvLoadImage("1.bmp");
CDC *pDC21 = GetDlgItem(IDC_abc)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针
HDC hdc21 = pDC21->GetSafeHdc(); // 获取设备上下文句柄
CRect re21; // 矩形类
GetDlgItem(IDC_abc)->GetClientRect(&re21); //获取box21客户区
CvvImage cimg21; IplImage *src21; // 定义IplImage指针变量src //src = cvLoadImage("1.bmp", -21); // 将src指向当前工程文件目录下的图像1.bmp
src21 = src;
cimg21.CopyOf(src21, src21->nChannels);
cimg21.DrawToHDC(hdc21, &re21); //输出图像
ReleaseDC(pDC21);
cimg21.Destroy();
}
方法2:
1.在cXXdlg.h头文件,cXXDlg类的public成员里定义 CRect rect1;//新建矩形
2.在Dlg.cpp,初始化函数BOOL CXXDlg::OnInitDialog()中加入如下代码。
// TODO: 在此添加额外的初始化代码
CWnd *pWnd1 = GetDlgItem(IDC_abc);//CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。
pWnd1->GetClientRect(&rect1);//GetClientRect为获得控件相自身的坐标大小
namedWindow("view", WINDOW_AUTOSIZE);//设置窗口名
HWND hWndl = (HWND)cvGetWindowHandle("view");//hWnd 表示窗口句柄,获取窗口句柄
HWND hParent1 = ::GetParent(hWndl);//GetParent函数一个指定子窗口的父窗口句柄
::SetParent(hWndl, GetDlgItem(IDC_abc)->m_hWnd);
::ShowWindow(hParent1, SW_HIDE);//ShowWindow指定窗口中显示
//view窗口表示图片控件abc
3.按钮事件函数添加如下代码
void CXXDlg::OnBnClickedButton3()
{
Mat srcimg = imread("1.bmp");
resize(srcimg, srcimg, Size(rect1.right, rect1.bottom),0 ,0 ,INTER_AREA); //把原图变为控件框规格大小,缩小图片用INTER_AREA好,放大图片用INTER_CUBIC好
namedWindow("view");//定义一个img窗口
imshow("view", srcimg);
}
结果如下