1 / 30
文档名称:

USB摄像头采集.doc

格式:doc   大小:70KB   页数:30页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

USB摄像头采集.doc

上传人:漫山花海 2019/4/7 文件大小:70 KB

下载得到文件列表

USB摄像头采集.doc

相关文档

文档介绍

文档介绍:薈USB摄像头图像采集程序分析膆本文是在Linux操作系统下实现对USB摄像头的图像采集与显示的。由于操作系统已经有了USB摄像头的驱动,因此摄像头可以直接使用。USB摄像头的数据采集和显示分为三个步骤:USB摄像头采集数据;将采集的数据进行解码转换成RGB格式;利用Framebuffer将RGB数据显示在LCD上。蒄USB摄像头图像采集属于V4L2编程,可以参考VideoforLinuxTwoAPISpecification这个文档。我的USB摄像头采集的数据格式是Jpeg图片,像素是320*240,下一步工作是将JPEG图片转换成RGB格式。对Framebuffer进行操作便可以显示RGB图像,即可显示摄像头采集的图像了。多祯图片连续显示便可显示连续的画面。羁下面我将从后到前的顺序依次介绍这三个过程。莈***首先是对Framebuffer的编程实现对RGB图像的显示。薃Framebuffer在硬件上对应的就是手持设备的LCD,在PC机上就是显示其了。在软件上就称为Framebuffer了,在Linux系统中,一个设备相当于一个文件,对文件的操作相当于对设备进行操作了,显示器对应的设备文件就是/dev/fb0。进行如下操作:le/dev,查看设备文件,看是否有fb0,如果有这个设备就可以进行下面的编程了。如果没有,需要修改一个文件,/boot/grub/,在我们使用的那个系统增加如下参数,rgb=0x317,设置为1024*76816位色显示,然后重启便可以看到fb0了。蒀第一步是对fb0的初始化,读取fb0相关参数并得到内存映射地址。肈intinit_fb(void)艿{羅 //intfb; 袀 structfb_var_screeninfofb_var;衿 // 肆 fb=open("/dev/fb0",O_RDWR);肃 if(fb<0)薃 {蕿 printf("open/dev/fb0error!\n");肇 return-1;蒆 }羃 荿 // ioctl(fb,FBIOGET_VSCREENINFO,&fb_var);薄 w=;莂 h=;肀 bpp=;羆 printf("screeninformation:%d*%d,bpp:%d\n",w,h,bpp);蚃 袁 // fbmem=mmap(0,w*h*bpp/8,PROT_WRITE|PROT_READ,MAP_SHARED,fb,0);羇肅 return0; 芁}薁之前定义了全局变量,螅staticint fb=-1; //fb0文件描述符膃staticintw,h,bpp; //显示器长度,宽度,每像素多少位蚀staticshort*fbmem;芁这里主要有一个函数mmap(0,w*h*bpp/8,PROT_WRITE|PROT_READ,MAP_SHARED,fb,0);袆把Framebuffer映射到内存空间,长度为w*b*bpp/8个字节。然后通过对这段内存进行读取和修改,相当于对Framebuffer(硬件上就是LCD)的读取和修改。薆 下面是对Framebuffer的操作了,也就是对LCD进行操作了。莃voidfb_point(unsignedshort*fbmem,intx,inty,螇 intw,shortcolor)羈{蚄 fbmem[y*w+x]=color;螃}薈 这是一个画点的函数,(x,y)代表LCD的横坐标、竖坐标,确定某一个具体的位置,color为颜色值。在这里我采用的是RGB565编码,通过三元色确定一个像素的颜色。R(red)占5位,G(green)占6位,B(blue)占5位,正好16位,两个字节,因此fbmem为short类型。螅螂voiddisplay_image(unsignedshort*fbmem,intw,节 intimgw,intimgh,unsignedshort*imgbuf)芈{ 螆 inti,j;膅 shortcolor;蚂 unsignedshort*imagebuf=(unsignedshort*)imgbuf;羈袈 for(j=0;j<imgh;j++)芃 {肁 for(i=0;i<imgw;i++)蝿{蚅 color=*imagebuf;薆 fb_point(fbmem,10+i,10+j,w,color);蒀 imagebuf++;葿}蚆 }螄}膄这是一个显示图片的函数,参数fbmem代表mmap映射frambuffer的首地址,intw代表屏的宽度,intimgw,imgh代表