网站大量收购闲置独家精品文档,联系QQ:2885784924

USB摄像头采集..doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
USB摄像头采集.

USB摄像头图像采集程序分析 本文是在Linux操作系统下实现对USB摄像头的图像采集与显示的。由于操作系统已经有了USB摄像头的驱动,因此摄像头可以直接使用。USB摄像头的数据采集和显示分为三个步骤:USB摄像头采集数据;将采集的数据进行解码转换成RGB格式;利用Framebuffer将RGB数据显示在LCD上。 USB摄像头图像采集属于V4L2编程,可以参考Video for Linux Two API Specification这个文档。我的USB摄像头采集的数据格式是Jpeg图片,像素是320*240,下一步工作是将JPEG图片转换成RGB格式。对Framebuffer进行操作便可以显示RGB图像,即可显示摄像头采集的图像了。多祯图片连续显示便可显示连续的画面。 下面我将从后到前的顺序依次介绍这三个过程。 首先是对Framebuffer的编程实现对RGB图像的显示。 Framebuffer在硬件上对应的就是手持设备的LCD,在PC机上就是显示其了。在软件上就称为Framebuffer了,在Linux系统中,一个设备相当于一个文件,对文件的操作相当于对设备进行操作了,显示器对应的设备文件就是/dev/fb0。进行如下操作:le/dev,查看设备文件,看是否有fb0,如果有这个设备就可以进行下面的编程了。如果没有,需要修改一个文件,/boot/grub/menu.lst,在我们使用的那个系统增加如下参数,rgb = 0x317,设置为1024*768 16位色显示,然后重启便可以看到fb0了。 第一步是对fb0的初始化,读取fb0相关参数并得到内存映射地址。 int init_fb (void) { //int fb; struct fb_var_screeninfo fb_var; //1.open framebuffer fb = open(/dev/fb0,O_RDWR); if (fb 0) { printf(open /dev/fb0 error!\n); return -1; } //2.get fb information ioctl(fb, FBIOGET_VSCREENINFO, fb_var); w = fb_var.xres; h = fb_var.yres; bpp = fb_var.bits_per_pixel; printf(screen information: %d * %d, bpp :%d\n,w,h,bpp); //3.get framebuffer address fbmem = mmap(0, w*h*bpp/8, PROT_WRITE|PROT_READ, MAP_SHARED,fb,0); return 0; } 之前定义了全局变量, static int fb = -1; //fb0文件描述符 static int w, h, bpp; //显示器长度,宽度,每像素多少位 static short *fbmem; mmap(0, w*h*bpp/8, PROT_WRITE|PROT_READ, MAP_SHARED,fb,0); 把Framebuffer映射到内存空间,长度为w*b*bpp/8个字节。然后通过对这段内存进行读取和修改,相当于对Framebuffer(硬件上就是LCD)的读取和修改。 下面是对Framebuffer的操作了,也就是对LCD进行操作了。 void fb_point (unsigned short *fbmem,int x,int y, int w,short color) { fbmem[ y*w + x] = color; } 这是一个画点的函数,(x,y)代表LCD的横坐标、竖坐标,确定某一个具体的位置,color为颜色值。在这里我采用的是RGB565编码,通过三元色确定一个像素的颜色。R(red)占5位,G(green)占6位,B(blue)占5位,正好16位,两个字节,因此fbmem为short类型。 void display_image(unsigned short *fbmem,int w, int imgw,int imgh,unsigned short *imgbuf) { int i,j; short color; unsigned short *imagebuf = (unsigned short *)imgbuf; for (j = 0 ;j imgh;j++) { for (i = 0 ;i imgw;i++) { color = *imageb

文档评论(0)

xznh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档