/
YUV_RGB.py
68 lines (49 loc) · 1.67 KB
/
YUV_RGB.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import numpy as np
from numpy import *
from scipy.misc import imresize
def yuv_import(filename, dims, numfrm, startfrm):
fp = open(filename, 'rb')
blk_size = np.prod(dims) * 3 / 2
fp.seek(int(blk_size * startfrm), 0)
d00 = dims[0] // 2
d01 = dims[1] // 2
Y = np.zeros((numfrm, dims[0], dims[1]), np.uint8, 'C')
U = np.zeros((numfrm, d00, d01), np.uint8, 'C')
V = np.zeros((numfrm, d00, d01), np.uint8, 'C')
for i in range(numfrm):
for m in range(dims[0]):
for n in range(dims[1]):
Y[i, m, n] = ord(fp.read(1))
for m in range(d00):
for n in range(d01):
U[i, m, n] = ord(fp.read(1))
for m in range(d00):
for n in range(d01):
V[i, m, n] = ord(fp.read(1))
fp.close()
return (Y, U, V)
def yuv2rgb(Y, U, V, height, width,):
U = imresize(U, [height, width], 'bilinear', mode = 'F')
V = imresize(V, [height, width], 'bilinear', mode = 'F')
Y = Y * 255.0
rf = Y + 1.4075 * (V * 255.0 - 128.0)
gf = Y - 0.3455 * (U * 255.0 - 128.0) - 0.7169 * (V * 255.0 - 128.0)
bf = Y + 1.7790 * (U * 255.0 - 128.0)
for m in range(height):
for n in range(width):
if(rf[m, n] > 255):
rf[m, n] = 255
if(gf[m, n] > 255):
gf[m, n] = 255
if(bf[m, n] > 255):
bf[m, n] = 255
if (rf[m, n] < 0):
rf[m, n] = 0
if (gf[m, n] < 0):
gf[m, n] = 0
if (bf[m, n] < 0):
bf[m, n] = 0
r = rf.astype(uint8)
g = gf.astype(uint8)
b = bf.astype(uint8)
return r, g, b