YUV(NV21)图像数据到RGB颜色空间的转换
Last updated on November 26, 2023 pm
[TOC]
本文主要介绍YUV_NV21颜色空间到RGB(BGR in OpenCV)颜色空间的转换,并给出示例代码,另附YUV图像查看工具。
NV21(YUV420)介绍
NV12和NV21属于YUV420格式(每2x2四个Y,共用一组uv),是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。先存储所有的Y,然后UV交错存储:NV12先U后V,NV21先V后U。
YUV420sp示例格式如下:
YUV_NV21转BGR代码
YUV_NV21颜色空间到RGB(BGR in OpenCV)颜色空间的转换示例代码如下:
1 |
|
转换出的(正确)效果如下:
接下来,我自己按如下逻辑实现该算法,替换掉 OpenCV的 cv::cvtColor(mat_src, mat_dst, cv::COLOR_YUV2BGR_NV21)
- 从内存中读取出每个像素的YUV,即 YUV420 —> YUV444
- 根据 YUV —> RGB 公式,计算出RGB值
- 按 BGR888 的内存分布格式,将RGB值写入内存传给
cv::Mat
- 保存图片到本地显示
实现代码如下:
1 |
|
该代码中试了几种 YUV —> RGB 的算法,效果最好的即上面使用(未注释)的代码,转换结果如下:
欢迎各位同学指正,找出效果不好的原因,并解决问题,谢谢~
- 在StackOverflow回答的问题:Converting YUV into BGR or RGB in OpenCV
- 整个工程可参见我的Github工程:https://github.com/chenguang055/cgocv_app/tree/master/image_convertor ,可在此提交 Issue
- 本代码 测试yuv raw图像 可在此下载:https://download.csdn.net/download/u011178262/10791506
YUV图像 查看工具
YUV(NV21)图像数据到RGB颜色空间的转换
https://cgabc.xyz/posts/267a3fd1/