一、新建TEST7项目
二、配置OpenCV链接库,下载并添加CvvImage.h和CvvImage.cpp文件
原因:opencv2.x以上版本已经不支持CvvImage类,而MFC picture控件使用的是Image*类,不支持Mat;
三、插入控件:button、picture
type属性:
- Frame:显示一个无填充的矩形框
- Rectangle:显示一个填充的矩形框,矩形颜色可通过Color 属性的下拉列表设定
- Icon:显示一个图标(Icon)
- Bitmap:显示一个位图(Bitmap)
- Owner Draw:自绘
- Enhanced Metafile:显示一个加强的元数据文件(Metafile)
- Etched Horz:显示一条横分割线
- Etched Vert:显示一条竖分割线
四、为控件添加消息处理函数
五、添加代码
在主框架头文件“TEST7Dlg.h”中添加头文件:
#pragma once
#include "cv.h"
#include "highgui.h"
#include "CvvImage.h"
在主框架头文件“TEST7Dlg.h”中添加成员定义、成员函数声明DrawPicToHDC:
CRect rect; //位置矩形
CStatic* pStc; //标识图像显示的Picture控件
CDC* pDC; //视频显示控件设备上下文
HDC hDC; //视频显示控件设备句柄
CvCapture* capture; //视频获取结构
CvvImage cimg;
//添加成员函数声明DrawPicToHDC
void DrawPicToHDC(IplImage *img, UINT ID);
在主框架实现文件“TEST7Dlg.cpp”中添加函数实现代码:
- 构造函数中初始化:
CTEST7Dlg::CTEST7Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CTEST7Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pStc=NULL;
pDC=NULL;
capture=NULL;
}
- 成员函数DrawPicToHDC的实现:
void CTEST7Dlg::DrawPicToHDC(IplImage *img, UINT ID)
{
pStc=(CStatic *)GetDlgItem(ID);//IDC_VIEW为Picture控件ID
pDC = pStc->GetDC();
hDC= pDC->GetSafeHdc();
pStc->GetClientRect(&rect);
cimg.CopyOf(img);
cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
ReleaseDC( pDC );
}
- 在新增按钮的响应函数中添加代码:
void CTEST7Dlg::OnBnClickedOnOpenButton()
{
// TODO: 在此添加控件通知处理程序代码
IplImage *image=NULL; //原始图像
if(image) cvReleaseImage(&image);
image = cvLoadImage("test.bmp"); //显示图片
DrawPicToHDC(image, IDC_PIC_STATIC);
}
六、编译运行,结果如下: