前情提要:因为在研究新的图片转y4m的方法,所以采用了OpenCV的方式来处理RGB图片,将RGB图片使用cvtColor函数RGB2YUV_YV12的时候,发现颜色有一定的偏差,于是在查找是代码本身的问题还是调用过程的问题。
结果是OpenCV自己的坑,OpenCV在实现RGB2YUV_YV12这一过程的时候,并非是按照标准的处理方法,0-255的范围来实现的,而是使用了16-235的标准
附上RGB24与YUV420的互转公式
$Y= 0.299 \times R+0.587 \times G+0.114 \times B\\$ $U=-0.147 \times R-0.289 \times G+0.463 \times B\\$ $V= 0.615 \times R-0.515 \times G-0.100 \times B\\$但是在OpenCV里面并不适用,经过实验,在COLOR_YUV2BGR_I420这个通道,用的是量化的转换公式
注意,此处尽管YUV的范围是0-255,但是依然按Y去减16去实现
TODO:回去吧OpenCV的源码改一下重新编译一遍,看看能不能把函数公式的计算方法修正一下。
Be First to Comment