NVIDIA的边缘计算的序列板子都配备了视频编码器和解码器,使用解码器硬件解码当然比使用OpenCV+ffmpeg之类的软解码要快多了。使用Jetson Nano的解码程序遇到个问题就是Jetson Nano在存放解码出来的图像的YUV数据时没有完全遵循一般的规范来做。
一般在压缩视频(DV设备生成)中YUV420格式使用较多,YUV420准确的说应该叫YCbCr420,YCbCr是YUV(Y的取值范围为0~255,U的取值范围为-122~122、V的取值范围为-157~157)的缩放和偏移版本,Y的取值范围为16-255,Cb和Cr的取值范围为16-240,YCbCr有4:4:4、4:2:2、4:2:0、4:1:1这几张采样格式,YUV420指YCbCr在水平和垂直方向都对Cb和Cr采样减少为2:1,Y为黑白分量,在水平和垂直方向采样比值都是4,下图左边是H261/H263/MPEG1的采样方式,右图是H264/MPEG2的采样方式:

YUV的数据存放格式分为planar和packed两种。planar格式最常用,它是先连续存放所有像素点的Y分量数据,紧接着存放所有像素点的U分量数据,最后存放所有像素点的V分量数据。packed格式则是每个像素点的Y,U,V数据是交错连续存储的。YUV420中,一个像素点对应一个Y,一个4X4的小方块对应一个U和V,对于YUV420p,也就是说planar格式存放的,先存放完Y分量数据再存放U分量数据,再存放V分量数据,以一个分辨率为8X4的YUV图像为例,它们的420p存放格式如下图:

文章详细介绍了在使用NVIDIA Jetson Nano进行视频解码时遇到的问题,即其YUV420数据存放不遵循通用规范,导致图像处理错误。通过分析Jetson Nano的解码器输出特性,提出了一个去空洞的精准拷贝函数,解决了数据转换问题,并展示了如何使用OpenCV或libyuv将YUV数据转换为BGR数据。
最低0.47元/天 解锁文章
1418

被折叠的 条评论
为什么被折叠?



