import sys, os import Image w = 640 h = 480 fn_yuv = "file.yuv" fn_png = "file.png" im = Image.new("RGB", (w, h)) raw = open(fn_yuv, "rb") # # General YCbCr to RGB matrix, Y: 16-235, C: 16-240, RGB: 888 # R = Y + 0 + 1.402 *(Cr-128) # G = Y + -0.34414*(Cb-128) + -0.71414*(Cr-128) # B = Y + 1.772 *(Cb-128) + 0 # # Coefficient C = [ [1, 0, 1.402], [1, -0.34414, -0.71414], [1, 1.772, 0] ] # Offset O = [ 0, 0, 0 ] for y in range(0, h): for x in range(0, w, 2): p = raw.read(4) q = [0, 0, 0, 0] for i in range(0, 4): q[i] = ord(p[i]) # For YCbCr-422 with sequence: Y0 Cb0 Y1 Cr0 Y2 Cb2 Y3 Cr2 Y4 ... Y = [0, 0] Y[0] = q[0] Cb = q[1] Y[1] = q[2] Cr = q[3] for i in range(0,2): r = C[0][0] * (Y[i] + O[0]) + C[0][1] * (Cb - 128 + O[1]) + C[0][2] * (Cr - 128 + O[2]) g = C[1][0] * (Y[i] + O[0]) + C[1][1] * (Cb - 128 + O[1]) + C[1][2] * (Cr - 128 + O[2]) b = C[2][0] * (Y[i] + O[0]) + C[2][1] * (Cb - 128 + O[1]) + C[2][2] * (Cr - 128 + O[2]) if (r < 0): r = 0 if (r > 255): r = 255 if (g < 0): g = 0 if (g > 255): g = 255 if (b < 0): b = 0 if (b > 255): b = 255 im.putpixel((x+i,y), (int(r), int(g), int(b))) im.save(fn_png) raw.close() im.show()
2008年3月19日
將 YCbCr 轉成 RGB
使用 Python 將 YCbCr 的資料轉成 RGB
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言