像素格式之YUV(基于海思Hisi35xx平台)
Ps:总结归纳一下自己工作中遇到的一些关于YUV格式的知识点和问题。水平有限,写的不太完整,后续会不断完善。如果有错误和不足之处,还请各位不吝赐教。
YUV格式简介
- YUV,是一种颜色编码方法。YUV,YCbCr,YPbPr等专有名词都可以称为YUV。Y表示亮度、U(Cb)V(Cr)表示色度。
- YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。
- 在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。
YUV的存储格式
通常分为:
1.打包(Packed)格式;
像素点的Y、U、V是连续交替存储的。
YUV/YUV/YUV/YUV/YUV/YUV....
2.平面(Planar)格式;
像素点的Y、U、V,是分别连续存储的。相当于将YUV拆成三个平面存储。
YYYYYY/UUUUUU/VVVVVV...
3.平面格式又有Semi-Planar的类别;
像素点的Y是连续存储的,U、V分量是交叉存放的。
YYYYYY/UV/UV/UV/UV/UV/UV...
YUV的采样方式
主流有:
1.YUV444:每一个Y分量对应一组UV分量,平均一个像素占用8+8+8=24位。
2.YUV422:每两个Y分量共用一组UV分量,8+4+4=16位。
YUVY / UYVY / YUV422P / YUY2 ,此处要注意,YUY2是packed打包格式的。
3.YUV420:每四个Y分量共用一组UV分量,8+4+0=12位。
YUV420P :YV12、YU12 是一种Planar格式。两者的区别是:YU12存储顺序是YUV,即YCbCr。YV12,存储顺序是YVU,即YCrCb。
YUV420SP:NV12、NV21 是一种Semi-Planar格式。NV12是IOS的模式,NV12是Android的模式。 其实nv系列,都属于semi-plane系列
4.YUV411:每四个Y分量共用一组UV分量,8+2+2=12位。
此处借用一张图来补充说明三种采样方式的差别:
注意要把YUV的采样方式和存储格式结合起来分析:
对于Planar的YUV格式,Y、U、V分别连续存储。
对于Packed的YUV格式,Y、U、V连续交替存储。
对于每种方式的Size大小,可借鉴以下方式分析:
YUV-sp422:宽(Stride) * 高 * 2
YUV-sp420:宽(Stride) * 高 * 1.5
YUV-400: 宽(Stride) * 高
//YUV-SP422
|-Width(Stride)-|
Y Y Y Y -- --
Y Y Y Y Heigth
Y Y Y Y
Y Y Y Y --
U V U V Heigth * 2
U V U V
U V U V
U V U V --//YUV-SP420
|-Width(Stride)-|
Y Y Y Y -- --
Y Y Y Y Heigth
Y Y Y Y
Y Y Y Y --
U V U V Heigth * 1.5
U V U V --
以海思芯片(hisi35xx)为例,在视频处理子系统(VPSS)上,通过接口获取的一帧处理完成的图像,这里我们以NV21的采样格式,SP420的打包格式 来讲。
在通过接口HI_MPI_VPSS_GetChnFrame获得指向视频图像帧信息结构体( VIDEO_FRAME_INFO_S)的指针后,我们需要抽出其中的视频原始图像帧结构( VIDEO_FRAME_S)。
我们可通过该结构获得其中的宽度、高度、像素格式、跨距、物理地址、虚拟地址等信息。
这里讲一下图像跨距(stride)的概念。
不同于图像的宽度,图像跨距又叫扫描宽度,是单行像素(一个扫描行)的宽度。当视频图像存储在内存时,图像的每一行末尾可能包含一些扩展内容,这些扩展的内容只影响图像如何存储在内存中,但是不影响图像如何显示出来。如果每一行像素末尾拥有扩展内容,Stride的值一定大于图像的宽度值。所以在处理一个视频帧时,在计算的时候必须把stride也计算进去。
1.在得到帧图像的各种信息后,首先我们从内存中映射出可供用户进程操作的地址。
HI_VOID* HI_MPI_SYS_MmapCache(HI_U64 u64PhyAddr, HI_U32 u32Size);
//参数1:需映射的内存单元起始地址。参数2:映射的字节数。
参数1,即图像帧结构中的物理地址。
参数2,即帧图像大小。根据通道属性为YUVsp420,所以这里的Size大小为Stride * Height * 3 / 2。
此接口函数返回的是一个物理地址,这里即Y分量的首地址。可得:
//Y分量的地址 pUserPageAddr为上述接口函数返回值
pVBufVirt_Y = pUserPageAddr;
//UV分量的地址 Y分量之后才开始UV分量
pVBufVirt_C = pVBufVirt_Y + stride * height;
在得到这些地址之后,我们就可以对图像格式进行转换。具体的转换后续再进行详细记录。
具体方式有:
1.通过Libyuv库进行转换,SP420->P420->YUY2。
2.通过NEON指令转换。 NV21->YUY2。
等。
//V1.0
2019.12.06
1.总结了YUV采样格式、YUV存储方式,已经基于海思平台的简单操作。
像素格式之YUV(基于海思Hisi35xx平台)相关推荐
- 基于海思开发板的屏幕截图程序(二)
针对 基于海思开发板的屏幕截图程序(一)作了改进,上篇文章的截图结果不正确的原因是:我公司的开发板上fb0中设置的图片格式为ARGB1555,但是我将它作为RGB565来使用,导致转换出来的图片数据不 ...
- yolo 海思嵌入式_一、基于海思芯片:从算法到移植 darknet框架下训练yolov3
今天是2020年1月25号,大年初一,万万没想到,这个本来狂舞躁动的时刻,敝人会安逸的坐在家里写博客,这场肺炎带给我们的应该是深刻反思.边缘计算如日中天,或者说把深度学习落地,搞到移动端解决是一个大趋 ...
- 对于抖音关闭OBS的解决方案之基于海思方案的NDI编码器和解码器使用方法
对于抖音关闭OBS终于有个临时的解决方案了,但这个方案还是要求主播有权限使用电脑开播,现在开始介绍NDI接入方法,如果还是有不明白的请留言. 参考连接: https://blog.csdn.net/w ...
- 基于海思方案的NDI编码器和解码器使用方法
本文镜像:https://www.linkpi.cn/archives/356 本文链接:https://blog.csdn.net/weixin_45326556/article/details/1 ...
- 《基于海思35xx nnie引擎进行经典目标检测算法模型推理》视频课程介绍
前言 沉寂两个月,终于将新的视频课程<<基于海思35xx nnie引擎进行经典目标检测算法模型推理>>(其链接为https://edu.csdn.net/course/deta ...
- 基于海思AI芯片的智能视频分析边缘网关
1 产品简介 基于海思高性能AI平台的智能视频分析边缘网关主要实现从网络摄像头及NVR采集的多路高清视频流进行实时分析功能,产品内置高性能视频处理单元与神经网络加速运算单元,加上基于深度学习框架的AI ...
- 四、基于海思芯片:从算法到移植 生成海思wk文件并进行成果展示
一.基于海思芯片:从算法到移植 darknet框架下训练yolov3 二.基于海思芯片:从算法到移植 darknet框架下yolov3转为caffe框架下 三.基于海思芯片:从算法到移植 c ...
- 【数字视频编码基础学习】像素格式RGB/YUV
一.RGB概述 R:red,G:Green,B:Blue,即红绿蓝--色光三原色(加法三原色),通过不同比例相加,可产生多种颜色. 补:除色光三原色外,还有另一种颜料三原色(减法三原色),即看到的印刷 ...
- 海思linux中编译,基于海思开发环境,交叉编译,安装tslib库
环境:Ubuntu-18.04 64位 交叉编译器:arm-hisiv600-linux tslib版本:tslib-1.4 一.安装交叉编译器 [注意]本文中使用 Hi3531D 的 V600 编译 ...
最新文章
- 人脸识别引擎SeetaFaceEngine简介及在windows7 vs2013下的编译
- Java Graphics类的绘图方法
- 爬虫侵入计算机系统,【探讨】利用“爬虫技术”获取数据行为的刑事考量 ——以一起非法获取计算机信息系统数据案为例...
- 中有冒号 文件路径_用Matlab脚本文件实现Excel文件的合并
- V4L2学习(三)框架分析
- springMVC设置静态资源过滤器,过滤js、css、images等静态资源
- js table 生成序号_CSS Counter 以及 CSS content 内容生成技术的实用价值
- Linux之安装虚拟机/虚拟操作系统[VisualBox]
- 1. paip.discuz X2.5 积分(金钱)功能API总结
- linux下解除端口防火墙,Linux下防火墙配置、端口的开启和关闭
- 软件测试之Web测试流程和方法
- 用tinypng压缩图片
- 从年薪1万到年薪100万的日子
- 计算机械功的公式,机械功的计算
- 反编译jad的命令使用
- WiFi信号覆盖面积小?如何扩大Wifi信号覆盖范围?
- ajax 传对象数组到后台
- 如何了解客户的购买价值观 (销售中的心理学)
- SURF网格化特征点提取算法流程(一)
- NAT技术的简要概述
热门文章
- PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现
- BUIUCTF-镜子里面的世界
- IOTA架构下的数据采集
- Centos下堡垒机Jumpserver V3.0环境部署
- 算法模型部署上线工程实践
- org.springframework.web.bind.MissingRequestHeaderException: Missing request header ‘token‘ for metho
- 八大名茶,铁观音为首
- SQL34 批量插入数据
- base64存储图片/显示图片
- node爬虫(入门)