MFC是VS中专门用来开发用户界面程序的模块。
Opencv中集合了各种图像处理的函数,是一个无比强大的计算机视觉库。
创建MFC程序:
1、创建MFC Application程序
2、选择Dialog based,Use MFC in a static library(此处可以让生成的程序集成需要调用的库无序外部库的支持),取消Use Unicode libraries。
3、选择C****Dlg类finish。其余的选项默认即可。
4、放置Picture control控件。设置ID为IDC_CameraDisplay。
5、放置Button控件。设置ID为IDC_OpenCamera。
6、右键Class Wizard,选择IDC_OpenCamera和BNCLICKED。点击Add Handler -> Apply -> OK。
7、在生成的函数中加入代码:
capture = cvCaptureFromCAM(1);
if(!capture)
{
MessageBox("camear open error!");
ExitProcess(0);
}
SetTimer(1,33,NULL);
其中capture = cvCaptureFromCAM(1);表示打开USB摄像头1,0表示打开笔记本摄像头,-1表示让用户选择摄像头。
SetTimer(1,33,NULL);表示开启定时器1,循环时间为33ms。
8、增加定时器消息处理在工程上右键Class Wizard -> Messages -> WM_TIMER -> Add Handler -> Apply -> OK。
9、在生成的函数中加入代码
image = cvQueryFrame(capture);
if( !image.empty() )
{
DrawPicToHDC(&image, IDC_STATIC);
}
else
{
MessageBox("OnTimer Error!!");
}
10、添加void CMyFaceDlg::DrawPicToHDC(IplImage *img, UINT ID)
代码如下:
void CMyFaceDlg::DrawPicToHDC(IplImage *img, UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDC= pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf( img ); // 复制图片
cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
ReleaseDC( pDC );
}
11、添加CvvImage.h和CvvImage.cpp文件
CvvImage.h源代码:
#pragma once
#ifndef CVVIMAGE_CLASS_DEF
#define CVVIMAGE_CLASS_DEF
#include "opencv.hpp"
/* CvvImage class definition */
class CvvImage
{
public:
CvvImage();
virtual ~CvvImage();
/* Create image (BGR or grayscale) */
virtual bool Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
/* Load image from specified file */
virtual bool Load( const char* filename, int desired_color = 1 );
/* Load rectangle from the file */
virtual bool LoadRect( const char* filename,
int desired_color, CvRect r );
#if defined WIN32 || defined _WIN32
virtual bool LoadRect( const char* filename,
int desired_color, RECT r )
{
return LoadRect( filename, desired_color,
cvRec