mirror of
https://github.com/gunchev/home_bin.git
synced 2025-11-20 12:15:46 +00:00
Add yuv420p_to_png.py and yuv422_to_png.py
From https://shrex999.wordpress.com/2013/07/31/yuv-to-rgb-python-imaging-library/
This commit is contained in:
parent
abbe65a93a
commit
c45966f597
2 changed files with 119 additions and 0 deletions
61
video/yuv420p_to_png.py
Executable file
61
video/yuv420p_to_png.py
Executable file
|
|
@ -0,0 +1,61 @@
|
||||||
|
# Author : sherin.s@gmail.com (Sherin Sasidhan)
|
||||||
|
# Date : 05-Oct-2010
|
||||||
|
|
||||||
|
import Image
|
||||||
|
import sys
|
||||||
|
from struct import *
|
||||||
|
import array
|
||||||
|
|
||||||
|
if len(sys.argv) != 4:
|
||||||
|
print "***** Usage syntax Error!!!! *****\n"
|
||||||
|
print "Usage:"
|
||||||
|
print "python <script> <.yuv file yuv420p> <width>> <height> "
|
||||||
|
sys.exit(1) # exit
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
image_name = sys.argv[1]
|
||||||
|
width = int(sys.argv[2])
|
||||||
|
height = int(sys.argv[3])
|
||||||
|
|
||||||
|
y = array.array('B')
|
||||||
|
u = array.array('B')
|
||||||
|
v = array.array('B')
|
||||||
|
|
||||||
|
f_y = open(image_name, "rb")
|
||||||
|
f_uv = open(image_name, "rb")
|
||||||
|
f_uv.seek(width*height, 1)
|
||||||
|
|
||||||
|
image_out = Image.new("RGB", (width, height))
|
||||||
|
pix = image_out.load()
|
||||||
|
|
||||||
|
print "width=", width, "height=", height
|
||||||
|
|
||||||
|
for i in range(0, height/2):
|
||||||
|
for j in range(0, width/2):
|
||||||
|
u.append(ord(f_uv.read(1)));
|
||||||
|
|
||||||
|
for i in range(0, height/2):
|
||||||
|
for j in range(0, width/2):
|
||||||
|
v.append(ord(f_uv.read(1)));
|
||||||
|
for i in range(0,height):
|
||||||
|
for j in range(0, width):
|
||||||
|
y.append(ord(f_y.read(1)));
|
||||||
|
#print "i=", i, "j=", j , (i*width), ((i*width) +j)
|
||||||
|
#pix[j, i] = y[(i*width) +j], y[(i*width) +j], y[(i*width) +j]
|
||||||
|
Y_val = y[(i*width)+j]
|
||||||
|
U_val = u[((i/2)*(width/2))+(j/2)]
|
||||||
|
V_val = v[((i/2)*(width/2))+(j/2)]
|
||||||
|
B = 1.164 * (Y_val-16) + 2.018 * (U_val - 128)
|
||||||
|
G = 1.164 * (Y_val-16) - 0.813 * (V_val - 128) - 0.391 * (U_val - 128)
|
||||||
|
R = 1.164 * (Y_val-16) + 1.596*(V_val - 128)
|
||||||
|
pix[j, i] = int(R), int(G), int(B)
|
||||||
|
|
||||||
|
######################################################
|
||||||
|
# B = 1.164(Y - 16) + 2.018(U - 128)
|
||||||
|
# G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
|
||||||
|
# R = 1.164(Y - 16) + 1.596(V - 128)
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
#image_out.save("out.bmp")
|
||||||
|
image_out.show()
|
||||||
58
video/yuv422_to_png.py
Executable file
58
video/yuv422_to_png.py
Executable file
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Author : sherin.s@gmail.com (Sherin Sasidhan)
|
||||||
|
# Date : 05-Oct-2010
|
||||||
|
|
||||||
|
import Image
|
||||||
|
import sys
|
||||||
|
from struct import *
|
||||||
|
import array
|
||||||
|
|
||||||
|
if len(sys.argv) != 4:
|
||||||
|
print "***** Usage syntax Error!!!! *****\n"
|
||||||
|
print "Usage:"
|
||||||
|
print "python <script> <.yuv file uyvy422> <width>> <height> "
|
||||||
|
sys.exit(1) # exit
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
image_name = sys.argv[1]
|
||||||
|
width = int(sys.argv[2])
|
||||||
|
height = int(sys.argv[3])
|
||||||
|
|
||||||
|
y = array.array('B')
|
||||||
|
u = array.array('B')
|
||||||
|
v = array.array('B')
|
||||||
|
|
||||||
|
f_uyvy = open(image_name, "rb")
|
||||||
|
f_uv = open(image_name, "rb")
|
||||||
|
f_uv.seek(width*height, 1)
|
||||||
|
|
||||||
|
image_out = Image.new("RGB", (width, height))
|
||||||
|
pix = image_out.load()
|
||||||
|
|
||||||
|
print "width=", width, "height=", height
|
||||||
|
|
||||||
|
for i in range(0,height):
|
||||||
|
for j in range(0, width/2):
|
||||||
|
u = ord(f_uyvy.read(1));
|
||||||
|
y1 = ord(f_uyvy.read(1));
|
||||||
|
v = ord(f_uyvy.read(1));
|
||||||
|
y2 = ord(f_uyvy.read(1));
|
||||||
|
|
||||||
|
B = 1.164 * (y1-16) + 2.018 * (u - 128)
|
||||||
|
G = 1.164 * (y1-16) - 0.813 * (v - 128) - 0.391 * (u - 128)
|
||||||
|
R = 1.164 * (y1-16) + 1.596*(v - 128)
|
||||||
|
pix[j*2, i] = int(R), int(G), int(B)
|
||||||
|
|
||||||
|
B = 1.164 * (y2-16) + 2.018 * (u - 128)
|
||||||
|
G = 1.164 * (y2-16) - 0.813 * (v - 128) - 0.391 * (u - 128)
|
||||||
|
R = 1.164 * (y2-16) + 1.596*(v - 128)
|
||||||
|
pix[j*2+1, i] = int(R), int(G), int(B)
|
||||||
|
|
||||||
|
######################################################
|
||||||
|
# B = 1.164(Y - 16) + 2.018(U - 128)
|
||||||
|
# G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
|
||||||
|
# R = 1.164(Y - 16) + 1.596(V - 128)
|
||||||
|
######################################################
|
||||||
|
|
||||||
|
#image_out.save("out.bmp")
|
||||||
|
image_out.show()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue