2016-12-26 4 views
0

私はインターネット経由でプレビュー画面の画像を送るAndroidアプリを作っています。 YUVイメージのバイトが送信されます。このYUV NV21画像をRGB色空間に変換したいと思います。私はこのリンクhttp://www.41post.com/3470/programming/android-retrieving-the-camera-preview-as-a-pixel-arrayの変換機能を見ました。そして、samethinngを行う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

私はあなたが各反復でYPをインクリメントするのを忘れたと思います:)

答えて

0

を助けてくれてありがとう。リンクしたコードの88行目を参照してください。