~~~~
这是开始我第二次android底层camera的时候碰到的问题,没怎么仔细想,yuv420转灰度图片,直接把uv全部设置为0,为了防止下次再犯,我要把这个记下来。
~~~~
yuv420表示四个y公用一组uv分量,其他类似,常用就是yuv420,下面是yuv转rgb的公式,可以记录一下。
u = YUVdata[UPOS] - 128;
v = YUVdata[VPOS] - 128;
if (r>255) r=255;
if (r<0) r=0;
rdif = v + ((v * 103) >> 8);
invgdif = ((u * 88) >> 8) +((v * 183) >> 8);
bdif = u +( (u*198) >> 8);
r = YUVdata[YPOS] + rdif;
g = YUVdata[YPOS] - invgdif;
b = YUVdata[YPOS] + bdif;
~~~~ 而我们转灰度图片的时候由于y和uv的存储区是分开的,我们只要找到uv内存区直接全部赋值为128就行了。这个时候如果还需要转RGB的话,你要记住下面的公式:
R = Y + 1.4075 *(V-128)
G = Y – 0.3455 *(U –128) – 0.7169 *(V –128)
B = Y + 1.779 *(U – 128)
~~~~ 很明显灰度图片其实就是rgb三个都等于Y。