MFC编个对话框,能够实时显示摄像头捕捉的镜头, 点击确定,保存当前图像。

来源:互联网 发布:手机钢琴编曲软件 编辑:程序博客网 时间:2024/05/16 12:34

MFC编个对话框,能够实时显示摄像头捕捉的镜头, 点击确定,保存当前图像。然后点击检测按钮(调用face++ 人脸识别接口识别人脸的性别年龄情绪等)

现在在vc上采集视频常用的方法有三:vfw,directshow,opencv 

你是要进行图像处理的话推荐opencv(具体参考:于仕琪,opencv教程基础篇中的例3-6,稍作修改,估计就能用于你的工程) 

下面贴出我自己编的一个小工程:如有疑问,E-mail:zhoutingzhi@gmail.com 
进行opencv的预备操作你要看那本书和逛opencv中文网 

如有问题可以和我讨论(我也是菜鸟,刚为解决了这个问题窃喜不已)。 
1.新建mfc对话框工程,在其中添加一个picture控件,除了ID以外什么都不用改 

2.在对话框头文件(没有Dlg那个)中添加(最好是在“#include "resource.h" // main symbols之后”): 
#include "cxcore.h" 
#include "cvcam.h" 
#include "windows.h" 
#include "cv.h" 
#include "highgui.h" 
3.在工程-》设置-》选择所有配置-》link(连接)-》对象/库模块-》中添加: 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib 

4.在需要触发摄像头显示的地方添加: 
void CVideomfcDlg::OnButton1() 

// TODO: Add your control notification handler code here 

int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目 
HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //获得控件句柄(IDC_VIDEO就是图片控件) 
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头 
int width=240; 
int height=240; 

cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for 
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width); 
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height); 
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1); 
//回调函数将处理每一帧 

cvcamInit( ); 
cvcamStart( ); 


5.改变显示的图像序列大小,在窗口属性设定了以后,添加如下代码: 
int width=320; //这个就是需要显示的窗口大小 
int height=240; //根据自己需要选择 
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width); 
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height); 

6.在对话框类中添加callback成员函数(注意,在添加函数的时候,一定要选择static,不选的话你就自己郁闷去吧,反正我是为了这个郁闷了2个礼拜) 
void CVideomfcDlg::callback1(IplImage *image) 


IplImage* image1 = image; 
int i,j; 

assert (image); 
//获取当前系统时间 
SYSTEMTIME st2=; 
GetLocalTime(&st2); 
char sss[18]=; //这个是用来存储所要保存的图片名的,用的是一个笨办法,先定义,再修改其中的数组值。 

sss[7]=st2.wHour/10+48; //获取系统当前小时 
sss[8]=st2.wHour%10+48; 

sss[9]=st2.wMinute/10+48; //获取系统当前分钟 
sss[10]=st2.wMinute%10+48; 

sss[11]=st2.wSecond/10+48; //获取系统当前秒 
sss[12]=st2.wSecond%10+48; 



cvSaveImage(sss,image1); //使用系统当前时间为名称(XXXXXX.jpg)存储图片 
}
ps:你还需要在c盘根目录下建立一个叫1的文件夹保存图片。
祝你成功


0 1