在python中从YUV420sp转换为RGB

时间:2016-12-26 13:06:31

标签: android python rgb yuv

我正在创建一个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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

我想你忘了每次迭代都增加yp。请参阅您链接的代码的第88行。