VFW---摄像头视频捕捉函数解析
2013-05-28 17:24
369 查看
VFW---摄像头视频捕捉函数解析 #include <vfw.h> #pragma comment(lib, "Vfw32.lib") 初始化操作
1、创建捕获窗口 函数 capCreateCaptureWindow() 返回视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括: ① 动态地同视频和音频输入器连接或断开; ② 设置视频捕获速率; ③ 提供视频源、视频格式以及是否采用视频压缩的对话框; ④ 设置视频采集的显示模式为Overlay或为Preview; ⑤ 实时获取每一帧视频数据; ⑥ 将一视频流和音频流捕获并保存到一个AVI文件中; ⑦ 捕获某一帧数字视频数据,并将单帧图像以DIB格式保存; ⑧ 指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。
HWND m_hCapWnd = capCreateCaptureWindow("Capture",WS_POPUP,0,0,1,1,0,0);
2、关联窗体到本程序实例 capSetUserData(m_hCapWnd, this); m_hCapWnd窗口句柄相当于vfw捕获活动的基础,他就代表了这个捕获。
3、登记回调函数 登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为capStatusCallback(), capErrorCallback(), capVideoStreamCallback(),capWaveStreamCallback(),capYieldCallback()。
例如,设置回调函数: capSetCallbackOnVideoStream(m_hCapWnd, OnCaptureVideo);
4、获得安装的捕获驱动程序的名称和版本 capGetDriverDescription(iIndex, szDevName, MAX_PATH, szDevVersion, MAX_PATH); szDevName和szDevVersion返回当前第iIndex个设备的设备名称和版本。
5、连接捕获窗口与视频捕获卡 capDriverConnect(m_hCapWnd, iIndex);
6、获取捕获窗口的缺省参数 CAPTUREPARMS CapParms = {0}; capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
7、修改刚刚获得的参数
CapParms.fAbortLeftMouse = FALSE; // 退出鼠标设置
CapParms.fAbortRightMouse = FALSE; // ...
CapParms.fYield = TRUE; // 使用背景作业
CapParms.fCaptureAudio = FALSE; // 不获取声音
CapParms.wPercentDropForError = 50; // 允许遗失的百分比
8、设置捕获窗口的相关参数 capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
9、获得视频的格式、大小 capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo));
10、更改视频的尺寸 m_BmpInfo.bmiHeader.biWidth = 176; m_BmpInfo.bmiHeader.biHeight = 144;
11、设置新的视频属性 capSetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)) (不更改视频尺寸或者设置属性不正确运行时会出错!)
开始捕获(不使用磁盘存储的捕获)
1、初始化Dib HDRAWDIB m_hDib = ::DrawDibOpen();
2、开始绘制Dib ::DrawDibBegin(m_hDib, m_hDC, -1, // don't stretch -1, // don't stretch &m_BmpInfo.bmiHeader, IMAGE_WIDTH, // width of image IMAGE_HEIGHT,
// height of image 0);
3、开始捕获 capCaptureSequenceNoFile(m_hCapWnd);
结束退出
1、结束绘制Dib,关闭Dib: ::DrawDibEnd(m_hDib); ::DrawDibClose(m_hDib);
清除采集过程
1、停止采集过程 capCaptureAbort(m_hCapWnd);
2、使回调函数无效 capSetCallbackOnVideoStream(m_hCapWnd, NULL);
3、断开与设备的连接 capDriverDisconnect(m_hCapWnd);
在回调函数中的操作
1、关联数据到一个捕获窗体 CVideoCapture *vidcap=(CVideoCapture *)capGetUserData(hwnd); 注意其返回一个当前实例指针!因为其参数是通过回调函数参数传递而来的m_hCapWnd。
2、回放 ::DrawDibDraw(m_hDib, m_hDC, m_szLocalOffset.cx, // dest : left pos m_szLocalOffset.cy, // dest : top pos m_szLocalView.cx, // don't zoom x m_szLocalView.cy,
// don't zoom y &m_BmpInfo.bmiHeader, // bmp header info data, // bmp data 0, // src :left 0, // src :top IMAGE_WIDTH, // src : width IMAGE_HEIGHT, // src : height
DDF_SAME_DRAW); // use prev params....
没用到的:
获取采集设备的功能和状态: 通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS))来获取视频设备的能力,通过宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus))来获取视频设备的状态。
1、创建捕获窗口 函数 capCreateCaptureWindow() 返回视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括: ① 动态地同视频和音频输入器连接或断开; ② 设置视频捕获速率; ③ 提供视频源、视频格式以及是否采用视频压缩的对话框; ④ 设置视频采集的显示模式为Overlay或为Preview; ⑤ 实时获取每一帧视频数据; ⑥ 将一视频流和音频流捕获并保存到一个AVI文件中; ⑦ 捕获某一帧数字视频数据,并将单帧图像以DIB格式保存; ⑧ 指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。
HWND m_hCapWnd = capCreateCaptureWindow("Capture",WS_POPUP,0,0,1,1,0,0);
2、关联窗体到本程序实例 capSetUserData(m_hCapWnd, this); m_hCapWnd窗口句柄相当于vfw捕获活动的基础,他就代表了这个捕获。
3、登记回调函数 登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为capStatusCallback(), capErrorCallback(), capVideoStreamCallback(),capWaveStreamCallback(),capYieldCallback()。
例如,设置回调函数: capSetCallbackOnVideoStream(m_hCapWnd, OnCaptureVideo);
4、获得安装的捕获驱动程序的名称和版本 capGetDriverDescription(iIndex, szDevName, MAX_PATH, szDevVersion, MAX_PATH); szDevName和szDevVersion返回当前第iIndex个设备的设备名称和版本。
5、连接捕获窗口与视频捕获卡 capDriverConnect(m_hCapWnd, iIndex);
6、获取捕获窗口的缺省参数 CAPTUREPARMS CapParms = {0}; capCaptureGetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
7、修改刚刚获得的参数
CapParms.fAbortLeftMouse = FALSE; // 退出鼠标设置
CapParms.fAbortRightMouse = FALSE; // ...
CapParms.fYield = TRUE; // 使用背景作业
CapParms.fCaptureAudio = FALSE; // 不获取声音
CapParms.wPercentDropForError = 50; // 允许遗失的百分比
8、设置捕获窗口的相关参数 capCaptureSetSetup(m_hCapWnd, &CapParms, sizeof(CapParms));
9、获得视频的格式、大小 capGetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo));
10、更改视频的尺寸 m_BmpInfo.bmiHeader.biWidth = 176; m_BmpInfo.bmiHeader.biHeight = 144;
11、设置新的视频属性 capSetVideoFormat(m_hCapWnd, &m_BmpInfo, sizeof(m_BmpInfo)) (不更改视频尺寸或者设置属性不正确运行时会出错!)
开始捕获(不使用磁盘存储的捕获)
1、初始化Dib HDRAWDIB m_hDib = ::DrawDibOpen();
2、开始绘制Dib ::DrawDibBegin(m_hDib, m_hDC, -1, // don't stretch -1, // don't stretch &m_BmpInfo.bmiHeader, IMAGE_WIDTH, // width of image IMAGE_HEIGHT,
// height of image 0);
3、开始捕获 capCaptureSequenceNoFile(m_hCapWnd);
结束退出
1、结束绘制Dib,关闭Dib: ::DrawDibEnd(m_hDib); ::DrawDibClose(m_hDib);
清除采集过程
1、停止采集过程 capCaptureAbort(m_hCapWnd);
2、使回调函数无效 capSetCallbackOnVideoStream(m_hCapWnd, NULL);
3、断开与设备的连接 capDriverDisconnect(m_hCapWnd);
在回调函数中的操作
1、关联数据到一个捕获窗体 CVideoCapture *vidcap=(CVideoCapture *)capGetUserData(hwnd); 注意其返回一个当前实例指针!因为其参数是通过回调函数参数传递而来的m_hCapWnd。
2、回放 ::DrawDibDraw(m_hDib, m_hDC, m_szLocalOffset.cx, // dest : left pos m_szLocalOffset.cy, // dest : top pos m_szLocalView.cx, // don't zoom x m_szLocalView.cy,
// don't zoom y &m_BmpInfo.bmiHeader, // bmp header info data, // bmp data 0, // src :left 0, // src :top IMAGE_WIDTH, // src : width IMAGE_HEIGHT, // src : height
DDF_SAME_DRAW); // use prev params....
没用到的:
获取采集设备的功能和状态: 通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS))来获取视频设备的能力,通过宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus))来获取视频设备的状态。
相关文章推荐
- 基于VFW的摄像头视频捕捉程序(转)
- VFW视频捕捉流程(摄像头)
- Visual C++编程实现摄像头视频捕捉(转)
- 利用Flash获取摄像头视频进行动态捕捉
- DirectShow编程实现摄像头视频捕捉
- VFW实现视频捕捉
- DirectShow编程实现摄像头视频捕捉
- VFW实现视频捕捉
- 摄像头视频捕捉(简单通用--通过IsampleGrabberCB实现)
- windows mobile中使用DirectShow开发视频流之从摄像头流中捕捉一张图片
- 视频捕捉全教程(vc+vfw)
- 视频捕捉全教程(vc+vfw)
- JMF 摄像头 视频捕捉拍照 源代码
- 视频会议开发中动态调整摄像头捕捉分辨率的问题
- Visual C++编程实现摄像头视频捕捉
- DirectShow编程实现摄像头视频捕捉
- 解决OpenCV在使用摄像头捕捉视频流时出现的一个奇怪问题
- 使用cvCaptureFromCAM()函数打开摄像头并显示视频
- opencv 摄像头捕获的图像保存为avi视频 代码解析
- Visual C++编程实现摄像头视频捕捉(转贴,可能会用到)