2016-12-26 70 views
0

我正在製作一個Android應用程序,通過互聯網發送預覽屏幕的圖像。 YUV圖像的字節被髮送。我想將此YUV NV21圖像轉換爲RGB色彩空間。我看了這個鏈接的轉換函數http://www.41post.com/3470/programming/android-retrieving-the-camera-preview-as-a-pixel-array。並寫了一個Python代碼,做同樣的事情。這是python代碼。在Python中將YUV420sp轉換爲RGB

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

感謝您的幫助:)

回答

0

我想你忘了增加YP與每個迭代。請參閱您鏈接的代碼的第88行。