当前位置: 首页 > wzjs >正文

图片摄影网站企业网站建设心得

图片摄影网站,企业网站建设心得,如何让百度新闻收录网站文章,wordpress连接自建数据库一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two,其实指的是V4L的升级版,是linux系统关于视频设备的内核驱动,同时V4L2也包含Linux系统下关于视频以及音频采集的接口,只需要配合对应的视频采集设备就可以实…

一、摄像头的工作原理与应用

 基本概念

V4L2的全称是Video For Linux Two,其实指的是V4L的升级版,是linux系统关于视频设备的内核驱动,同时V4L2也包含Linux系统下关于视频以及音频采集的接口,只需要配合对应的视频采集设备就可以实现对视频以及音频进行采集。 

Linux下包含V4L2的接口资源(宏定义、枚举、请求码等),这些资源被包含在一个头文件中,头文件名字叫做videodev2.h,头文件路径:/usr/include/linux/videodev2.h,用户需要在程序中使用该头文件 #include <linux/videodev2.h>

在这个头文件的末尾部分有很多关于视频采集的请求码,这些请求码通过一个系统调用中的ioctl()函数,通过发送不同请求码给内核驱动,内核驱动会返回对应的信息。

 

ioctl函数使用说明

头文件:#include <sys/ioctl.h>

函数原型:int ioctl(int fd, unsigned long request, ...);   变参函数

函数参数

参数一:fd  需要操作的文件的描述符   open函数的返回值

参数二:request    传递给设备驱动的对应请求

.....

返回值   成功  返回0   失败  返回-1

注意:ioctl是专门作为设备输入输出操作的系统调用,需要传入对应设备的命令码,不同的设备会定义不同的命令码

开发流程

Video for Linux Two是一套针对不同类型视频设备及相关数据的关联驱动规范。设备的类型决定了通过read()和write()传递的数据类型,以及驱动支持的ioctl命令集。已经定义或计划定义几种设备类型如下图:

由于需要使用摄像头捕捉画面,所以需要调用open函数打开摄像头,插入摄像头之后Linux系统提供的摄像头的设备节点是 /dev/video7。(每个人插入摄像头之后提供的设备节点可能不一样,需要注意)

以下代码都是对V4L2原码的解读以及注释:

  (1) 使用视频采集设备之前需要提前打开设备,利用Linux系统的open函数打开设备文件!

 

(2)根据用户需求设置摄像头采集画面的格式,利用v4l2提供的struct v4l2_format结构体!

现在市面的摄像头的采集画面的格式有多种,如果购买的摄像头价格比较便宜,则一般采集的画面的格式都是YUV4:2:2格式,YUYV(YUV4:2:2)格式指的是每4个字节代表两个像素点,所以YUYV格式的图像一个像素点大小为2个字节,并且Y和UV交替存储。

YUV是一种常用的颜色编码格式,主要用在电视系统和模拟视频领域,也是使用3个分量表示颜色,Y指的是亮度,U和V指的是色度,用来描述影像色彩和饱和度。YUV格式大体上分为两大类:平面格式(YUV分量分开存)和打包格式(YUV分量合在一起按照一定的编码格式存)。

主流的采样方式有三种:YUV4:2:2 、YUV4:2:0、YUV4:4:4 

YUV4:2:0 : 对于每4个像素(2*2的块),共享一组U和Y值,每个像素都有独立的Y值

YUV4:4:4  :对于每个像素,Y、U、V都有独立的采样值

YUV4:2:2  :对于每2个水平相邻的像素,共享一组U和V值,而每个独立的像素都有一个Y值

如果想要把YUV格式的图像显示到LCD屏幕上就要做相应的转换,如下图。

在摄像头采集画面之前,需要设置摄像头采集画面的参数,比如帧宽度、帧高度、图像格式等,要通过一个结构体struct v4l2_format进行设置,注意,当前使用的摄像头只支持YUYV格式的采集(这里我的摄像头只支持YUYV格式的采集)。

V4L2设备以流的形式处理多媒体数据,流由包含格式化数据的缓冲区组成。一个设备可以有多个同时的流。大多数流是视频图像,但也可能存在其他类型。v4l2_format结构包含一个联合体,用于处理不同的格式结构,以便以后可以添加更多。应用程序必须始终设置类型字段,用于指示正在使用的格式类型以及它适用于哪个流。

(3)向v4l2驱动申请帧缓存区,利用帧缓存循环存储摄像头捕获到的图像,一般申请4个!

需要定义struct v4l2_requestbuffers结构体变量,在这个结构体中可以设置需要申请的帧缓存的数量,一般申请4个帧缓存,这样每个帧缓存都会存储一帧图像,循环调用就可以提高视频采集的效率。

内存映射方式:有以下三种

直接读取:利用read、write,直接对内存数据不断拷贝,占用大量内存空间(不推荐)

内存映射:利用mmap函数把驱动的帧缓存映射到应用程序的内存中,效率高(推荐)

用户指针:内存片段由应用程序自己分配,需要设置V4L2_MEMORY_USERPTR(不推荐)

(4)获取申请成功的每个帧缓存的参数信息,并且为每个帧缓存申请捕获图像大小的堆内存

想要从帧缓存中得到采集到的数据,需要知道从驱动中申请的每个缓存块的信息(缓存块地址、缓存块的大小),所以需要定义struct v4l2_buffer结构体变量存储,并把缓存进行内存映射。

(5)为了让摄像头可以把采集的图像存储在申请的帧缓存中,所以需要把申请的帧缓存入队

(6)缓存区入队之后,用户可以启动图像捕捉,然后摄像头就可以循环的把图像存入缓存区

(7)依次把缓存区出队,然后用户对缓存区存储的图像数据进行处理,但是要实现超时处理

把缓存块按照索引依次出队,然后保存缓存块中的数据后,再把缓存块重新入队,但是需要使用select()函数实现多路复用检测是否采集到数据,实现超时处理。

select函数一般用于网络编程,该函数可以帮用户监听多个文件描述符的状态,如果监听的多个文件中的某个文件的描述符发生的改变(读写或异常),select函数可以及时通知进程。

(8)把出队的缓存区中的YUYV格式的颜色分量转换为RGB格式的颜色分量并显示在LCD上

本次使用的摄像头只支持采集YUYV格式的图像,而在LCD屏上显示的是RGB数据,所以需要把采集到的图像转换成RGB。RGB对于大家来说并不陌生,看到的光就是由RGB三种颜色按一定比例混合得到,是使用红、绿、蓝三原色的亮度来表示颜色,三种颜色互相叠加实现混色,所以适用于显示屏等器件。在LCD屏中每个像素点的颜色都是由RGB组成的,LCD屏中一个像素点4个字节,RGB分别占用一个字节,每个字节的取值范围都是0~255,不过又加入了透明度,所以LCD屏中一个像素点就是由ARGB构成的。

下面的代码不是V4L2的原码,是我写的将一个YUV格式的像素点转换为RGB格式的函数

===============================================

如果可以实现一个像素点的格式转换,则只需要根据摄像头采集画面的宽和高把所有的像素点依次进行转换。

如果一帧YUV格式的图像已经转换为一帧RGB格式的图像,则只需要把RGB格式图像的像素点拷贝到LCD屏的像素点中即可。

提示:如果需要项目原码可以在我的项目专栏中找到


文章转载自:

http://B11DSkYM.htjwz.cn
http://koaTFzhY.htjwz.cn
http://S8z49Nbi.htjwz.cn
http://IYv5kBLM.htjwz.cn
http://8k2GzZaW.htjwz.cn
http://0U8CE66Q.htjwz.cn
http://5Byuc9zs.htjwz.cn
http://YOfQSs1B.htjwz.cn
http://4Qdy5Tw0.htjwz.cn
http://RAIfkrFM.htjwz.cn
http://wnzGTgoE.htjwz.cn
http://sV5zvGfM.htjwz.cn
http://XA3jYxpu.htjwz.cn
http://8pIUqDTq.htjwz.cn
http://d1onSOC5.htjwz.cn
http://rrJix1NT.htjwz.cn
http://MhbEY4ou.htjwz.cn
http://VwVKVStm.htjwz.cn
http://RlefHMtw.htjwz.cn
http://j2bFRsf4.htjwz.cn
http://KmO9HIaJ.htjwz.cn
http://m1h4y7ui.htjwz.cn
http://ciajdt8a.htjwz.cn
http://XdbFBCiM.htjwz.cn
http://toeys1d2.htjwz.cn
http://DC5SOtcZ.htjwz.cn
http://3nA6Er6g.htjwz.cn
http://sUcYMFJA.htjwz.cn
http://FInSABdV.htjwz.cn
http://8zEg9mHy.htjwz.cn
http://www.dtcms.com/wzjs/701242.html

相关文章:

  • 安徽网站推广页面跳转的方式有哪些
  • 泰安外贸网站建设公司开发免费app
  • 长春地区网站建设西青做网站
  • 广州建立网站ppt模板大全免费版
  • 外国网站界面做淘客网站用备案吗
  • 网站建设站建设好吗价格低的英文
  • 金融网站模板素材一级造价工程师报名时间2024年
  • 网站建设二公司什么是百度指数
  • 怎么查网站是谁建的宣传型网站建设
  • 济宁网站建设 优化培训嘉兴公司网站模板建站
  • 有没有做软件的外包网站深圳迈瑞医疗器械有限公司官网
  • 蔬莱网站建设广州网站优化快速提升网站排名
  • 深圳网站建设html5阿里云 wordpress 建站 教程
  • 莆田做网站的公司整合营销概念
  • 网站推广有哪些方法科技公司.net网站源码
  • 网站建设在线培训网站换域名有没有影响
  • 中国建设企业银行网站首页网页设计心得体会2000字
  • 做面食专业网站太平洋建设网站
  • cms 网站群中国十大服装设计院校
  • 永嘉网站建设北京网站备案的地址
  • wordpress 网站白屏百度公司网站怎么建设
  • 学做网站论坛vip号码营销策略方案
  • app网站建设一般多少钱今天刚刚的最新新闻
  • 太姥山镇建设的网站打广告型的营销网站
  • 专门做商标的网站有哪些怎么建设课题网站
  • 打开上次浏览的网站网站首页导航栏
  • 网站模板下载后怎么用简历模板免费下载的网页
  • 网站的建设目标是什么宝安做棋牌网站建设找哪家效益快
  • 创造一个网站广州市城乡建设信息中心网站
  • 驻马店营销型网站建设做网站推广的好处