Я делаю приложение для Android, которое отправляет изображения экрана предварительного просмотра через Интернет. байты изображения YUV отправляются. Я хочу преобразовать это изображение YVV NV21 в цветовое пространство RGB. Я посмотрел на функцию преобразования по этой ссылке http://www.41post.com/3470/programming/android-retrieving-the-camera-preview-as-a-pixel-array. И написал код python, выполняющий samethinng. Вот код python.Преобразование из YUV420sp в RGB в 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
Спасибо за помощь :)