FS2410开发板上,Linux是2.6的内核,Qt/Embedded是2.3.7版本的,USB摄像头主控芯片是中星微301P。摄像头驱动是spca5xxx,使用Video For Linux采集到jpeg图片,然后使用Qt/Embedded进行显示。 全部程序包含两个部分视频采集和图片显示。 只包含视频采集部分的程序: 其实很多Linux下的抓图程序和这个很类似。 Linux下的USB摄像头图像采集要完成两个部分:摄像头驱动程序和图像采集应用程序。 1 加载USB摄像头驱动程序 Linux下自带有ov511控制芯片的USB摄像头驱动,但是我们使用的是中星微的摄像头,所以无法直接使用。目前Linux下的开源USB摄像头驱动spca5xx支持中星微的摄像头。在网上下载好源码,交叉编译成内核模块后使用insmod命令加载到系统中去。把摄像头连接到开发板上,发现可以识别到摄像头,下面我们就可以进行摄像头图像采集编程了。 2 Linux下的视频采集编程接口简介 Linux对于视频采集设备的支持,是通过Video For Linux实现的,通常可以简称为V4L,现在较高版本的Linux内核都已经包含了Video For Linux。Video For Linux是为各种电视卡,以及并口和USB接口的音视频采集设备提供统一的编程接口,在Linux 下,视频采集设备的正常使用依赖于对Video For Linux标准的支持。 3 基于Video For Linux的图片捕捉 基于Video For Linux的图片捕捉流程如图所示,主要包括三个部分:初始化,同步,读取数据。 图片捕捉流程见上图,主要包括3个步骤: 1)初始化:首先是使用open函数打开视频设备文件,而且是独占的可读模式。然后使用Video For Linux接口函数设置视频设备的数据通道,设置视频数据传输的模式,可选的有NSTC或者PAL等。为了方便读取图像数据,使用mmap函数建立内存映射,在应用程序中直接读取图像数据。最后就是设置要捕捉的图片大小,即分辨率,我使用的摄像头最大可以提供分辨率800*600,每秒25张图片。 2)同步:等待一帧视频数据采集完毕后才能读取数据,否则将出现错误,同时还可以对帧号进行操作。 3)读取数据:我们使用的中星微摄像头传输过来的图片已经是JPEG编码格式。 下图就是使用Video For Linux采集的320*240的jpeg格式图片。 ……