我正在制作一个Android应用程序,通过互联网发送预览屏幕的图像。发送YUV映像的字节。我想把这个YUV NV21图像转换成RGB色彩空间。我看了这个链接http://www.41post.com/3470/programming/android-retrieving-the-camera-preview-as-a-pixel-array中的转换函数。并编写了一个python代码。这是python代码。在import numpy as np
from struct import unpack
def nv21torgb(byarray,width,height):
img = np.ndarray(shape=(height,width,3),dtype=np.uint8)
xra = range(height)
yra = range(width)
frameSize = width*height
yp = 0
for j in xra:
uvp = frameSize + (j >> 1)*width
u = 0
v = 0
for i in yra:
y = unpack('B',byarray[yp])[0] - 16
if i & 1 is 0:
v = unpack('B',byarray[uvp])[0] - 128
uvp = uvp + 1
u = unpack('B',byarray[uvp])[0] - 128
uvp = uvp + 1
y1192 = 1192 * y
r = y1192 + 1634*v
g = y1192 - 833*v - 400*u
b = y1192 + 2066*u
if r<0:
r = 0
elif r>262143:
r = 262143
if g < 0:
g = 0
elif g>262143:
g = 262143
if b<0:
b = 0
elif b>262143:
b = 262143
r = ((r<<6)&0xff0000)>>16
g = ((g>>2)&0xff00)>>8
b = ((b>>10)&0xff)
img[j][i] = [r,g,b]
return img
但是这个函数在某个地方似乎是错误的,因为我得到了奇怪的输出。
image
感谢您的帮助:)