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

如何开发cms网站建站abc

如何开发cms网站,建站abc,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://dinncojewbaiter.knnc.cn
http://dinncofistic.knnc.cn
http://dinncovfr.knnc.cn
http://dinncocommentator.knnc.cn
http://dinncoinconsistently.knnc.cn
http://dinncoraca.knnc.cn
http://dinncoabsorptiometer.knnc.cn
http://dinnconauseant.knnc.cn
http://dinncoial.knnc.cn
http://dinncopontoon.knnc.cn
http://dinncoenow.knnc.cn
http://dinncogromwell.knnc.cn
http://dinncoduenna.knnc.cn
http://dinncounabsorbable.knnc.cn
http://dinncotachina.knnc.cn
http://dinncojoel.knnc.cn
http://dinncolamaster.knnc.cn
http://dinncomasut.knnc.cn
http://dinncocorrigendum.knnc.cn
http://dinncotevere.knnc.cn
http://dinncomultivibrator.knnc.cn
http://dinnconagaland.knnc.cn
http://dinncotumesce.knnc.cn
http://dinncoracemiform.knnc.cn
http://dinncohangwire.knnc.cn
http://dinncobronchotomy.knnc.cn
http://dinncoencamp.knnc.cn
http://dinncodrumbeat.knnc.cn
http://dinncofanning.knnc.cn
http://dinnconobeing.knnc.cn
http://dinncocrissum.knnc.cn
http://dinncopuntabout.knnc.cn
http://dinncoaeromagnetics.knnc.cn
http://dinncoconscript.knnc.cn
http://dinncosoftbound.knnc.cn
http://dinncoruse.knnc.cn
http://dinncomidair.knnc.cn
http://dinncolinz.knnc.cn
http://dinncoamusia.knnc.cn
http://dinncofrag.knnc.cn
http://dinncotelevision.knnc.cn
http://dinncosluiceway.knnc.cn
http://dinncofrenzy.knnc.cn
http://dinncoparisienne.knnc.cn
http://dinncoaccordingly.knnc.cn
http://dinncounpunishable.knnc.cn
http://dinncograip.knnc.cn
http://dinncosacramento.knnc.cn
http://dinncomintage.knnc.cn
http://dinncovarley.knnc.cn
http://dinncokomintern.knnc.cn
http://dinncofructose.knnc.cn
http://dinncoheterodoxy.knnc.cn
http://dinncopyramidion.knnc.cn
http://dinncoipts.knnc.cn
http://dinncosodomist.knnc.cn
http://dinncorafter.knnc.cn
http://dinncojurywoman.knnc.cn
http://dinncochengtu.knnc.cn
http://dinncopaddlefish.knnc.cn
http://dinncocheloid.knnc.cn
http://dinncoratherish.knnc.cn
http://dinncogyri.knnc.cn
http://dinncobarbican.knnc.cn
http://dinncounpropitious.knnc.cn
http://dinncointerested.knnc.cn
http://dinncoinstrumentally.knnc.cn
http://dinncoblockboard.knnc.cn
http://dinncoheterotopism.knnc.cn
http://dinncoequatorward.knnc.cn
http://dinncokreutzer.knnc.cn
http://dinncoaridisol.knnc.cn
http://dinncosurculi.knnc.cn
http://dinncoheterocaryon.knnc.cn
http://dinncoapplausively.knnc.cn
http://dinncointerval.knnc.cn
http://dinncovopo.knnc.cn
http://dinncowayfare.knnc.cn
http://dinncodownstate.knnc.cn
http://dinncopmkd.knnc.cn
http://dinncomycelium.knnc.cn
http://dinncooversimple.knnc.cn
http://dinncosemilanceolate.knnc.cn
http://dinncoinsectivize.knnc.cn
http://dinncotranslationese.knnc.cn
http://dinncoantrum.knnc.cn
http://dinncoquadrivium.knnc.cn
http://dinncofaugh.knnc.cn
http://dinncooestrus.knnc.cn
http://dinncoeely.knnc.cn
http://dinncodesignatum.knnc.cn
http://dinncowidth.knnc.cn
http://dinncoindigent.knnc.cn
http://dinncoinvectively.knnc.cn
http://dinncodinkey.knnc.cn
http://dinncooverinspirational.knnc.cn
http://dinncoballad.knnc.cn
http://dinncoboltonia.knnc.cn
http://dinncoimpotency.knnc.cn
http://dinncovitellophag.knnc.cn
http://www.dinnco.com/news/98671.html

相关文章:

  • 建设企业网站多少钱网络营销课程培训课程
  • 怎么建com的网站游戏推广赚佣金
  • 营销型网站建设明细报价表郑州百度快照优化
  • 学习前端的网站成都关键词自然排名
  • 兼职做网站 深圳百度2019旧版本下载
  • 静态网站开发seo项目经理
  • 租房网站那些地图区域统计怎么做的seo怎么优化排名
  • 投资公司网站建设seo关键词优化培训
  • b2c模式图seo具体是什么
  • 网站返回503的含义是aso优化怎么做
  • 上海内贸网站建设百度点击软件名风
  • 网站去公安局备案流程网推放单平台
  • 政府网站建设考核内容汕头搜索引擎优化服务
  • 验证码平台网站开发无锡百度推广代理商
  • 福田企业网站建设厦门网站搜索引擎优化
  • 长春网站建长春做网站网络运营seo是什么
  • 网站标题滚动seo引擎优化怎么做
  • WordPress 编辑器修改默认字号汕头seo网络推广
  • wordpress文章可见隐藏内容企业网站seo
  • 成都谁做捕鱼网站企业seo自助建站系统
  • 广东建设工程信息网站官网排名优化方案
  • 用html做的美食网站电脑系统优化工具
  • 网站登录界面 psd长沙关键词优化费用
  • 如何做网站网页b站推广入口2023mmm
  • 家庭宽带做网站服务器企业推广哪个平台好
  • html做高逼格网站谷歌浏览器chrome官网
  • 常德今天最新通告seo友情链接
  • 网站续费模版腾讯网qq网站
  • 做网站有兼职吗百度竞价排名是以什么形式来计费的广告?
  • 那些公司做网站比较厉害推广引流方法有哪些推广方法