如何用DirectShow在MFC中作摄像头捕获程序

作者&投稿:吁姚 (若有异议请与网页底部的电邮联系)
如何在directshow架构中获取摄像头帧数据~

可以用ISampleGrabber回调得到帧数据。
建议看一下陆其明的《DirectShow开发指南》,讲的非常清楚。

大概就是create一个filter graph
然后枚举你的视频捕捉设备,选择你想要的设备获取IBaseFilter接口,然后添加到graph

接下来就看你的需求了,如果只是播放,就添加一个render filter然后连接并运行graph

如果你想获得具体的视频数据,那么需要你自己实现一个render filter,从input pin上获取数据,在filter里处理 或者开放一个接口提供给应用程序

有很多现成的例子

现在在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)存储图片
}
还需要在c盘根目录下建立一个叫1的文件夹保存图片。


direct是什么意思英语
vt.(用建议、指示、有益的情报等)指导; 导演(戏剧或电影); 指示方向; 把对准(某方向或某人)。vt.& vi.指导,导演,管理。vi.引路; 当向导; 领唱; 领奏。第三人称单数:directs现在分词:directing过去式:directed过去分词:directed形近词:correcterectarrect.

直接用英文怎么说
1、direct还可指在信封或包裹上写上姓名和地址。2、direct可用作不及物动词,也可用作及物动词,用作及物动词时接名词、代词或虚拟的that从句作宾语,也可接以动词不定式充当补足语的复合宾语。可用于被动结构。

direct的英语单词
中文释义:adj. 直接的;直系的;亲身的;恰好的 vt. 管理;指挥;导演;指向 vi. 指导;指挥 adv. 直接地;正好;按直系关系 第三人称单数:directs 现在分词:directing 过去式:directed 过去分词:directed 例句:All medicines should be stored away from moisture, direct sunlight, and heat....

英汉翻译indirect和direct区别
1、direct 性质表示:直接的、亲自的、亲身的。2、indirect 性质表示:间接的、附带的。二、用法上的区别:1、They are in direct contact with the hijackers.他们与劫机者直接联系。2、the indirect effects of the war.战争的间接后果。三、派生词上的区别:1、direct 第三人称单数:directs;现在...

direct是什么意思
adv.直接地; 径直地; 直截了当地; 正好;vt.(用建议、指示、有益的情报等) 指导; 导演(戏剧或电影) 指示方向; 把…对准(某方向或某人)[例句]The most direct route to the town centre 到市中心最直接的路线 [其他]第三人称单数:directs 现在分词:directing 过去式:directed 过去分词:...

direct的名词
direct:英[dəˈrekt];美[dəˈrekt] adj.直接的;亲自的;亲身的;笔直的;径直的;最近的;直射的;正好的;直爽的;直系的 v.把…对准(某方向或某人);管理;监督;指导;导演(戏剧或电影);指挥(管弦乐队);给(某人)指路;指示;把(信件等)寄至 adv.直接;径直;亲自 第三人称单数:directs 现在分词:directin...

高手进~关于DIRECTS 安装!!急 在线等
首先网上查询你的显卡是否支持DIRECTS9.0.如果不支持,那就白搭了,然后先把你现在安装的缷载掉,重新到微软的网站上下载一个,可能是压缩文件,下载后解压缩运行安装文件,一步一步就自动安装了,如果还不行,那可能就是显卡的问题了。我刚从网上查了下,支持DIRECTS9.0的显卡有以下:能够支持DX9....

direct怎么读
用作宾补动词S+~+n.\/pron.+to-vIdirectedhimtodothework.我命令他去做这项工作。Thecoachdirectedthemtorunfaster.教练指导他们跑快一些。Theofficerdirectedhismentoadvanceslowly.指挥官命令部下缓慢前进。Hedirectedustoremainsilent.他命令我们保持沉默。Themanagerdirectedustomakeall-roundarrangements.经理指示我们要...

direct有没有进行的意思
He directs the affairs of the estate.他管理(或负责)该庄园的事务。He directs the activities of the club.他管理俱乐部的活动。指示;命令;指挥,指令;统帅;规定:He directed us to leave the burning building.他指示我们撤离燃烧着的大楼。He directed the battle.他指挥了那场战斗。The ...

求大神帮忙解决下,逆战进入游戏的时候提示directs runtime错误,进不...
安装包里有修复工具 是个扳手图标 尝试下 或者卸载重装

师宗县13093599292: VC++用MFC的控件显示输入视频,并且可以随时截图,保存图片. -
钭券长春: MFC里没有这样的控件,要实现预览可以通过两种方式,一种是VFW(比较简单,功能稍微简单点),一种是DirectShow(稍微复杂,但功能强大).两种实现方法都是一样的:调用各自的视频预览接口,然后把mfc的某个窗口句柄传进去(CWnd,CStatic,CDialog都可以),就可以在窗体上实时看到视频图像,保存图片的方法是通过获取预览流数据然后自己写文件.总之MFC的标准控件没有这个功能.

师宗县13093599292: 在MFC环境中打开并播放一个YUV格式的视频文件 怎么实现这个问题 -
钭券长春: 可以去网上找个YUV的DirectShow解码filter,然后创建一个DirectShow graph,把结果输出转发到MFC程序.

师宗县13093599292: 关于VC6.0的MFC窗口如何实现相机的实时显示功能,大家有什么好的例子可以发我一个. -
钭券长春: 卡片机连上电脑后就不能执行录像、拍照功能了,如果是摄像机可以用DirectShow来实现,你可以看看用Microsoft DirectX 9.0 SDK (Summer 2004)\Samples\C++\DirectShow\Capture\AMCap是否可以预览,如果可以就可以用DirectShow来实现.

师宗县13093599292: 如何使用DirectShow接口 -
钭券长春: 本文主要是讲讲如何使用DirectShow接口.通常,在播放在线视频和音频文件时候,要用到微软的DirectX提供的DirectShow组件,使用DirectShow这个组件可以方便地播放视频和音频文件.为了使用该接口,首先得注册主互操作程序集...

师宗县13093599292: 你好我在做相机控制,希望用MFC搭建一个界面,在界面上显示相机拍到的图像,相机是basler,能给个案例? -
钭券长春: 先得了解该相机1、看相机是否附带开发包,如果有参照demo即可2、如果相机支持DirectShow,那就用DirectShow抓取视频流

师宗县13093599292: 求助,在MFC里怎么播放yuv格式的文件
钭券长春: 使用DrawDibDraw函数.

师宗县13093599292: cbuilder中能使用mfc中的类吗? -
钭券长春: CBuilder6.0中使用MFC 一、MFC编译参数: 进入菜单Project\Options后选Directories\Conditionals页 1)Includepath加入$(BCB)\include\MFC; 2)Librarypath加入$(BCB)\lib\Psdk; 3)对DirectShow编程的处理: Conditionaldefines加入STRICT;WIN...

师宗县13093599292: 用mfc添加操作,点开其他应用程序 -
钭券长春: 你这个当然不行,是打开另一个进程了,要实现你那个不是这么简单的,看看directshow吧

师宗县13093599292: MFC控制外设? 举个例子:怎么通过MFC怎么控制摄像头,是不是和键盘一样有消息相应函数啊或者有自己类封装 -
钭券长春: mfc没有封装视频捕获的api函数,可以通过调用相应函数来实现.参考 http://blog.csdn.net/byxdaz/article/details/4352778 另外,可通过DirectShow或OpenCV实现.具体资料自己搜吧

师宗县13093599292: 在VC环境下怎么配置DirectShow(一定要详细到每一步骤) -
钭券长春: 安装完directx sdk后,要将directx sdk的include和lib目录配置到vc的系统目录中,并且放到标准的vc目录之前,以保证编译器能拿到最新版本的源文件.配置方法为,打开vc,选择菜单项tool、options、directories,在弹出的对话框中的show ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网