论文部分内容阅读
[摘 要]随着当今社会信息化程度逐渐加强,人们不仅对于音频,视频的要求越来越高,人们对多媒体技术的需求也越来越高,不但要听到声音,还想要见到相关的影像,如可视电话系统、视频会议系统、各种实时监控系统等。因而对于视频、图像的处理技术的研究将会越来越重要。
本文采用windows平台下VC++6.0编译环境开发视频采集程序。使用大恒DH-CG300视频采集卡开发基于MFC的视频采集程序。能够实现从CCD工业相机将采集到的图像和视频分别保存为bmp、jpg图片和avi视频格式。
[关键词]视频采集;VC++;大恒DH-CG300
中图分类号:TP311.1 TP31 .81 文献标识码:A 文章编号:1009-914X(2015)33-0103-01
近年来,随着人类社会信息化程度的不断提高,以及通信技术与多媒体技术的飞速发展,众多领域,比如视频会议系统、可使电话系统、视频监控系统、远程教育及医疗系统、视频点播系统等以多媒体视频为主的应用迅速发展起来。
在这些视频应用领域中,获取良好的视频图像是后来进行压缩编码、网络传输的基础,所以首先需进行视频流的捕获;更重要的是能够实时获取动态的图像信息,并能对这些信息进行实时处理。因此,如何更好的实现视频捕获便成为多媒体技术的应用中重要的环节和关键的前提[2]。
视频捕获具有很好的开发前景,在计算机应用领域的许多方面,都离不开视频捕获。利用软件来去合理地实现视频捕获的功能,是一个非常具有研究与应用价值的课题。考虑到具体应用的情况,对视频捕获程序的具体要求也不尽相同,然而,还是有一些共同的特征是视频捕获程序所必须共有的,这就是,必须尽量做到高速、精确、实时地进行捕获,这也是视频捕获开发人员必须在开发过程中时刻铭记的原则。
本文中采用大恒图像DH-CG300视频采集卡实现对工业相机的视频捕获功能。将采集到的图像保存为各种静态图片格式和视频格式。
1.视频采集卡的工作流程
在Microsoft 的32位Windows操作系统中,图像采集卡应用接口库直接操作图像卡并提供给用户一个简单明确的应用接口。用户在编制自己的应用程序时,可以直接调用这些库函数来实现指定的功能。
一般情况下,图像卡的开始操作和初始化参数的设置,最好在用户应用程序的初始化中完成,图像卡的结束操作应在应用程序退出前执行。图像卡采集图像数据,不占用计算机CPU时间,支持图像的实时处理。采集图像到屏幕和采集图像到内存的操作,不能同时进行,即同一时刻图像卡采集图像到屏幕,或者到内存。
2.程序设计与实现
2.1VC++6.0编译器
Visual C++是一个功能强大的可视化软件开发工具。Visual C++ 6.0是微软的Visual C/C++编译器最实用的一个版本,它已远非只是一个编译器,而是一个基于windows操作系统的可视化开发环境,包括了综合的微软基本类库(MFC)。MFC是一个建立在windows API之上的C++类库,这使得开发windows应用程序变得简单而高效;它提供有复杂的资源编辑器,可以编辑对话框、菜单、工具栏等许多元素。
2.2框架设计
本系统主要功能由将CCD工业相机采集到的数据保存为bmp、jpg图像文件和avi视频文件三部分组成。另外还有视频采集卡的初始化部分,以及Intel JPEG Library库的使用。
2.3系统功能模块设计
2.3.1初始化视频采集卡
初始化视频采集卡分为以下几步:首先设置视频制式(PAL / NTSC),由当前视频源制式决定,然后设置视频格式,即采集图像的数据描述方式,设置扫描模式、晶振以及视频源路,视频源路VIDEO_SOURCE包括视频类型和序号,各种图像卡支持的视频源路不尽相同,再设置视频输入窗口,即视频输入范围,输入窗口取值范围,最后设置视频输出窗口,即视频输出范围,输出窗口取值范围必须在输入窗口范围以内。
2.3.2 在客户区预览视频
在客户区预览视频部分使用静态内存的概念。本文采用静态内存。
图像卡使用计算机内存采集图像数据,这段内存应该是物理连续的,在计算机系统启动时分配、预留出来,供图像卡使用,用户访问,并且内存在系统运行过程中一直存在,直到系统关闭时才被释放。我们定义这部分内存为静态内存。
在应用程序中调用函数CGSetStaticMem指定静态内存大小,然后重新启动计算机,分配静态内存。
重新设置要分配的静态内存大小后,每次启动计算机,系统都会按最新指定的大小分配完成,而不必再重新申请分配。不申请静态内存时,设为0页。
C.静态内存的使用
首先通过函数CGGetStaticMem获取当前静态内存的分配状态,分配成功的内存才能使用,如果要分配的静态内存过大,系统分配不成功。用户只能减少分配的数量,重新分配。
然后使用函数CGStaticMemLock对指定位置和大小的静态内存进行锁定,一般情况下,分配的内存都可以锁定成功。
在接口库中,图像卡采集图像到静态内存的操作都使用偏移Offset和长度Length来定位内存位置。例如,启动连续采集到内存函数CGStartSnap(HCG hcg,DWORD dwMemOffset,BOOL bInterline,WORD wSum)等。用户访问静态内存要通过内存的指针,例如,图像数据传递函数CGDataTransform。
静态内存访问结束后,使用函数CGStaticMemUnlock解锁内存,应用程序每次对某个内存对象调用CGStaticMemLock时,最后都必须对该对象调用CGStaticMemUnlock。
D.预览视频
首先使用CGStaticMemLock(dwImageSize * wParam, dwImageSize, &handle, (PVOID *)&pLinearAddr);函数锁定静态内存。
将静态内存中的图像传递到用户缓冲区,同时进行格式转换。如果静态内存中图像为15、16、32位,则转换为24位。由于图像卡采集到静态内存的图像数据是正向存放,而Windows中处理的位图数据需要倒置,因此一般还要将图像倒置。
而CGDataTransform()函数可以实现此功能。
然后再解除内存的锁定,使用函数CGStaticMemUnlock(handle);
使用StretchDIBits()函数在VIEW客户区显示缓冲区图像。
3 结论
本次程序设计中,完成了使用大恒DH-CG300视频采集卡设计。主要实现BMP、JPG静态图片的保存与AVI视频文件的保存问题。
参考文献
[1] 谭浩强. C++面向程序设计[M]. 北京: 清华大学出版社, 2001. 123 - 146.
作者简介
雷萌(1981-),女,讲师,研究方向:计算机软件与理论;
本文采用windows平台下VC++6.0编译环境开发视频采集程序。使用大恒DH-CG300视频采集卡开发基于MFC的视频采集程序。能够实现从CCD工业相机将采集到的图像和视频分别保存为bmp、jpg图片和avi视频格式。
[关键词]视频采集;VC++;大恒DH-CG300
中图分类号:TP311.1 TP31 .81 文献标识码:A 文章编号:1009-914X(2015)33-0103-01
近年来,随着人类社会信息化程度的不断提高,以及通信技术与多媒体技术的飞速发展,众多领域,比如视频会议系统、可使电话系统、视频监控系统、远程教育及医疗系统、视频点播系统等以多媒体视频为主的应用迅速发展起来。
在这些视频应用领域中,获取良好的视频图像是后来进行压缩编码、网络传输的基础,所以首先需进行视频流的捕获;更重要的是能够实时获取动态的图像信息,并能对这些信息进行实时处理。因此,如何更好的实现视频捕获便成为多媒体技术的应用中重要的环节和关键的前提[2]。
视频捕获具有很好的开发前景,在计算机应用领域的许多方面,都离不开视频捕获。利用软件来去合理地实现视频捕获的功能,是一个非常具有研究与应用价值的课题。考虑到具体应用的情况,对视频捕获程序的具体要求也不尽相同,然而,还是有一些共同的特征是视频捕获程序所必须共有的,这就是,必须尽量做到高速、精确、实时地进行捕获,这也是视频捕获开发人员必须在开发过程中时刻铭记的原则。
本文中采用大恒图像DH-CG300视频采集卡实现对工业相机的视频捕获功能。将采集到的图像保存为各种静态图片格式和视频格式。
1.视频采集卡的工作流程
在Microsoft 的32位Windows操作系统中,图像采集卡应用接口库直接操作图像卡并提供给用户一个简单明确的应用接口。用户在编制自己的应用程序时,可以直接调用这些库函数来实现指定的功能。
一般情况下,图像卡的开始操作和初始化参数的设置,最好在用户应用程序的初始化中完成,图像卡的结束操作应在应用程序退出前执行。图像卡采集图像数据,不占用计算机CPU时间,支持图像的实时处理。采集图像到屏幕和采集图像到内存的操作,不能同时进行,即同一时刻图像卡采集图像到屏幕,或者到内存。
2.程序设计与实现
2.1VC++6.0编译器
Visual C++是一个功能强大的可视化软件开发工具。Visual C++ 6.0是微软的Visual C/C++编译器最实用的一个版本,它已远非只是一个编译器,而是一个基于windows操作系统的可视化开发环境,包括了综合的微软基本类库(MFC)。MFC是一个建立在windows API之上的C++类库,这使得开发windows应用程序变得简单而高效;它提供有复杂的资源编辑器,可以编辑对话框、菜单、工具栏等许多元素。
2.2框架设计
本系统主要功能由将CCD工业相机采集到的数据保存为bmp、jpg图像文件和avi视频文件三部分组成。另外还有视频采集卡的初始化部分,以及Intel JPEG Library库的使用。
2.3系统功能模块设计
2.3.1初始化视频采集卡
初始化视频采集卡分为以下几步:首先设置视频制式(PAL / NTSC),由当前视频源制式决定,然后设置视频格式,即采集图像的数据描述方式,设置扫描模式、晶振以及视频源路,视频源路VIDEO_SOURCE包括视频类型和序号,各种图像卡支持的视频源路不尽相同,再设置视频输入窗口,即视频输入范围,输入窗口取值范围,最后设置视频输出窗口,即视频输出范围,输出窗口取值范围必须在输入窗口范围以内。
2.3.2 在客户区预览视频
在客户区预览视频部分使用静态内存的概念。本文采用静态内存。
图像卡使用计算机内存采集图像数据,这段内存应该是物理连续的,在计算机系统启动时分配、预留出来,供图像卡使用,用户访问,并且内存在系统运行过程中一直存在,直到系统关闭时才被释放。我们定义这部分内存为静态内存。
在应用程序中调用函数CGSetStaticMem指定静态内存大小,然后重新启动计算机,分配静态内存。
重新设置要分配的静态内存大小后,每次启动计算机,系统都会按最新指定的大小分配完成,而不必再重新申请分配。不申请静态内存时,设为0页。
C.静态内存的使用
首先通过函数CGGetStaticMem获取当前静态内存的分配状态,分配成功的内存才能使用,如果要分配的静态内存过大,系统分配不成功。用户只能减少分配的数量,重新分配。
然后使用函数CGStaticMemLock对指定位置和大小的静态内存进行锁定,一般情况下,分配的内存都可以锁定成功。
在接口库中,图像卡采集图像到静态内存的操作都使用偏移Offset和长度Length来定位内存位置。例如,启动连续采集到内存函数CGStartSnap(HCG hcg,DWORD dwMemOffset,BOOL bInterline,WORD wSum)等。用户访问静态内存要通过内存的指针,例如,图像数据传递函数CGDataTransform。
静态内存访问结束后,使用函数CGStaticMemUnlock解锁内存,应用程序每次对某个内存对象调用CGStaticMemLock时,最后都必须对该对象调用CGStaticMemUnlock。
D.预览视频
首先使用CGStaticMemLock(dwImageSize * wParam, dwImageSize, &handle, (PVOID *)&pLinearAddr);函数锁定静态内存。
将静态内存中的图像传递到用户缓冲区,同时进行格式转换。如果静态内存中图像为15、16、32位,则转换为24位。由于图像卡采集到静态内存的图像数据是正向存放,而Windows中处理的位图数据需要倒置,因此一般还要将图像倒置。
而CGDataTransform()函数可以实现此功能。
然后再解除内存的锁定,使用函数CGStaticMemUnlock(handle);
使用StretchDIBits()函数在VIEW客户区显示缓冲区图像。
3 结论
本次程序设计中,完成了使用大恒DH-CG300视频采集卡设计。主要实现BMP、JPG静态图片的保存与AVI视频文件的保存问题。
参考文献
[1] 谭浩强. C++面向程序设计[M]. 北京: 清华大学出版社, 2001. 123 - 146.
作者简介
雷萌(1981-),女,讲师,研究方向:计算机软件与理论;