视频像素数据


视频像素数据的来源及过程

从图像源有开始说起
一种源头是硬盘上的,其实更深的源头在于制作或者拍摄
先不说硬盘,先说拍摄
那就涉及到了摄像机.

摄像机的目的是把光学图象信号转变为电信号,以便于存储或者传输。

既然涉及到了转换,那就要谈起传感器
目前的数码摄像头传感器按照…分为两种

一种是CCD(电荷藕合)元件;另一种是CMOS(互补金属氧化物导体)器件。

CCD感光器件:
CCD全称为Charge Coupled Device,中文翻译为电荷藕合器件。它使用一种高感光度的半导体材料制成,能把光线转变成电荷,然后通过模数转换器芯片将电信号转换成数字信号,数字信号经过压缩处理经USB接口传到电脑上就形成所采集的图像。

CMOS感光器件:
CMOS全称为Complementary Metal-Oxide Semiconductor,中文翻译为互补性氧化金属半导体。CMOS的制造技术和一般计算机芯片没什么差别,主要是利用硅和锗这两种元素所做成的半导体,使其在CMOS上共存着带N(带–电) 和 P(带+电)级的半导体,这两个互补效应所产生的电流即可被处理芯片纪录和解读成影像。

从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式

有些手机基带芯片只能支持2M以下的YUV sensor,3M以上只能使用JPEG sensor
由于基带芯片不能处于码流太大的视频流,所以就要求在单位事件内对图像的数据表示的大小要尽量小.
一个图像尽量小,也就是说 分辨率 * 像素所占字节 小

分辨率能不能小呢?
像素所占字节能不能小呢?怎么才算是小呢?


sensor原理

Sensor的感光原理是通过一个一个的感光点对光进行采样和量化,但在Sensor中,每一个感光点只能感光RGB中的一种颜色

通常所说的30万像素或130万像素等,指的是有30万或130万个感光点。每一个感光点只能感光一种颜色。

要还原一个真正图像,需要每一个点都有RGB三种颜色

还原的话有几种方式

  1. 在Sensor模组的内部会有一个ISP模块,会将Sensor采集到的数据进行插值和特效处理
    实例:
    sensor输出为CCIR601或656的格式(YUV)
    例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了,然后在编码成601或656的格式传送给Host。
  2. 将没个感光点感应到的RGB数值直接传送给Host,由Host来进行插值和特效处理。
    实例:
    Sensor输出为RAW RGB格式
    Raw RGB 每个像素只有一种颜色(R、G、B中的一种);
    在手机摄像头的测试过程中,由sensor输出的数据就是Raw data(Raw RGB),经过彩色插值就变成RGB
    RGB 每个像素都有三种颜色,每一个的值在0~255之间

sensor输出分为四种,一种是YUV,一种是raw RGB.一种为RGB,一种为JPEG

模组就是sensor

第一种,sensor输出的为YUV,
第二种,sensor输出的是Raw RGB(sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度))
第三种,RGB:传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bitR+6-bitG+5-bitB。G多一位,原因是人眼对绿色比较敏感
第四种:JPEG:有些sensor,特别是低分辨率的,其自带JPEGengine,可以直接输出压缩后的jpg格式的数据

第二种输出的数据不是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)->彩色插值(目的是获得RGB格式,便于图像显示)->图像显示;这样就可以发现整个模组是否正常,有无坏点,脏点的等,检测出不良品;(软件的处理过程当中,为了获得更好的图像质量,还需要白平衡,gamma校正,彩色校正)

对于第二种输出的数据,在手机的应用中,手机根据相机模组的数据格式,提供一个ISP(主要用于RGB格式的),配合软件,使照相功能得到应用


视频采集卡输出

sensor 的输出信号给到外围设备(可以是视频采集卡),然后由外围设备处理,然后输出.输出的数据交由电脑进行视频处理.

一般的外围设备给到内存的码流一般都是YUV数据流的形式.


视频处理

在这个阶段,输入为YUV数据,输出可以是H.264或MPEG.

视频处理都是在原始YUV码流进行编码和解析.

至于视频是按照什么格式流入的,是怎么对每帧图像进行判断的,怎么存储的,怎么编码的,怎么输出的,后来再说


视频显示

视频显示的话,输入为RGB数据,然后输出为图像.

至于输入的RGB数据时什么格式的,是怎么输出图像的,后来再说


视频存储

这个视频的存储是不是只是说视频在硬盘上的存储?

视频存储每帧中的每个像素可以用rgb表示,也可以用yuv表示

如果用rgb表示的话,只能用打包存储的方式存储,但是这种打包存储也分好几种存储格式

如果用yuv表示的话,可以用打包存储的方式,也可以用平面存储的方式存储.每种存储方式都对应好几种存储格式.

先说RGB

RGB pixel formats

再说YUV

YUV pixel formats


RGB与YUV

RGB中的R/G/B的取值范围都是[0,255]

RGB与YUV之间的转换

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16

Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128

Y的取值范围是[16,235.045]
U的取值范围是[16.055,239.945]
V的取值范围是[16.055,239,945]

一个亮度信号(Y)

红色差信号(R-Y)

蓝色差信号(B-Y)

严格上讲,色差信号共有三个,即R-Y,B-Y,G-Y。但只有两个是独立的,第三个可用另外两个求出。


YUV

YUV也是一种颜色编码方法,像素格式亮度参量和色度参量分开表示

  1. 可以避免相互干扰
  2. 降低色度的采样率而不会对图像质量影响太大
  3. 解决了彩色电视机与黑白电视的兼容问题
  4. YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。

主要用于电视系统以及模拟视频领域

YUV码流有多种不同的格式,要分析YUV码流,就必须搞清楚你面对的到底是哪一种格式,并且必须搞清楚这种格式的YUV采样和分布情况。

采样: 比例
分布:打包还是平面

平常所讲的YUV A:B:C的意思一般是指基于4个象素来讲,其中Y采样了A次,U采样了B次,V采样了C次.4个像素是一个宏像素

YUV 格式可以分为打包格式packed format和平面格式planar format。

  1. 打包格式将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);
  2. 平面格使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。

Packed format和planner format的区别在于

  1. packed format中的YUV是混合在一起的,因此就有了UYVY、YUYV等等,他们在码流中排列的方式有所不同。
  2. 对于planner format每一个Y分量,U分量和V分量都是以独立的平面组织的,也就是说所有的U分量都在Y分量之后出现,而V分量在所有的U分量之后。就像三个大色块一样。

摄像头驱动

部分摄像头是UVC摄像头,就是是免驱的,驱动在内核中配置就好了.

// USB Video Class
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_VIDEO_DEV=y
CONFIG_I2C=y
CONFIG_VIDEO_V4L2=y
CONFIG_USB_VIDEO_CLASS=y

关于怎么看一个摄像头是不是免驱
http://www.cnblogs.com/emouse/archive/2013/03/03/2941938.html

而这个摄像头驱动是依照V4L写出来的,这个标准已经升级到第二版,所以是V4L2
函数
http://blog.chinaunix.net/uid-26101960-id-3297657.html
框架
http://blog.csdn.net/eastmoon502136/article/details/8190262/

通过V4L2的接口可以获得当前摄像头驱动所支持的所有数据格式以及分辨率等信息。

  • UVC camera 内核数据流程

用户层代码


摄像头工具

luvcview -L
将摄像头插到Linux机器上,直接使用命令luvcview获得当前摄像头所支持的所有数据格式以及分辨率信息

视频像素数据_从摄像头到驱动相关推荐

  1. FFmpeg之视频封装格式、流媒体协议、视频编解码协议和传输流格式、时间戳和时间基、视频像素数据

    通用视频分析工具:Mediainfo.Elecard StreamEye(视频编码分析工具); 视频封装格式: ********************MP4****************** MP ...

  2. rk3399 采集摄像头数据_[Camera]摄像头镜像

    platform:RK3399 OS:Android 7.1 参考: 1.石先 https://www.jianshu.com/p/7d88ec1347b6 2.KrisFei https://blo ...

  3. 【音视频数据数据处理 1】【YUV篇】分离YUV420P像素数据中的Y、U、V分量

    [音视频数据数据处理 1][YUV篇]分离YUV420P像素数据中的Y.U.V分量 一.YUV420P 数据格式介绍 二.分离YUV420P像素数据中的Y.U.V分量 - 代码实现 三.查看生成的YU ...

  4. 像素,视频制式,数字_模拟信号摄像头

    致谢:像素,视频制式,数字_模拟信号摄像头 1,PAL,NTSC,还有SECAM,这是全球现行的三种模拟技术彩色电视的制式. NTSC(National Television System Commi ...

  5. HI3559V200获取IMX458摄像头数据_(2)sdk例程sample_vio

    文章目录 1.sample_vio介绍 1 linux client端 2 liteos server端 2.sample_vio_server如何在liteos运行 1.如何将sample_vio_ ...

  6. javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据...

    javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...

  7. android获取摄像头视频帧数据

    1.思路 一.通过android的Camera.setPreviewCallback(PreviewCallback cb)监听回调. 二.此回调函数public void onPreviewFram ...

  8. 大数据时代,摄像头的像素精准度超乎你的想象

    如今我们已经身处大数据时代,什么意思呢,其实就是我们每个人,每样事物,每样喜好,都已经被量化成了数字,在计算机里运算传播. 我们每个人的信息,都变成了计算机里的一串串数字,在网络的世界里传播.而今天我 ...

  9. 视频监控数据价值 你还没有重视吗?

    多年以来,平安城市的大型项目在运营和公安实践中,通常会遇到以下情况的发生:缺少视频信息情报的标准化生成方法,进而缺少利用视频信息情报指导侦查.破案的新型警务工作模式.现在视频监控的应用已融入民警的日常 ...

最新文章

  1. 人工智能图像到图像转换图像分割任务中语义一致的图像到图像转换
  2. 放在NSArray、NSDictionary等容器内的对象Item,Item中的property在程序运行过程中被无故释放...
  3. 创新实训个人记录:P versus NP
  4. 微信公众平台两种消息处理流程对比
  5. java 自旋锁_java锁的种类以及辨析(一):自旋锁
  6. APP远程调试及网络自动化测试
  7. 图【数据结构F笔记】
  8. 开始我的blog之旅
  9. DeepMind科学家:强化学习足以满足通用AI需求
  10. centOS restart xinetd
  11. 余承东:华为P50系列无5G版本,但依然流畅
  12. 分布式技术是大规模应用的最后一个考验
  13. 【实习之T100开发】帆软报表笔记
  14. x722网卡驱动linux,Intel英特尔E810/X722网卡驱动1.4.24版For Linux RDMA(2021年4月8日发布)...
  15. 配置Model Optimizer的Python 3.7.4 ECHO 处于关闭状态。‘pip3‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
  16. MTK获取iso的几种方式
  17. 真当Flutter不能热更新?QQ团队开源动态化Flutter,稳进大厂
  18. 每天进步一点点【稀疏数组】
  19. 微信小程序云开发支付
  20. 《Buildozer打包实战指南》实战打包beautifulsoup (bs4)

热门文章

  1. Python自动生成ffmpeg转码HEVC (X265,H265) 命令
  2. 《左耳听风》-ARTS-打卡记录-第二十五周
  3. EXCEL表格-“魔法操作”之智能填充(数据提取)
  4. docker创建容器共享目录
  5. 正确的iconv使用方法
  6. 更新npm和node
  7. Java Redis操作实例
  8. 操作系统学习(2) 进程管理
  9. mysql建库、建表命令、sql语句大全
  10. 100个C语言的编程题