-
Notifications
You must be signed in to change notification settings - Fork 1
/
bin_viewer.py
77 lines (65 loc) · 2.37 KB
/
bin_viewer.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
68
69
70
71
72
73
74
75
76
77
from PIL import Image
import struct
import numpy as np
import os
import sys
byte_order = sys.byteorder
dir_path = '../data/regular'
def read_bin(file_path): # return an numpy array height*width*3
with open(file_path, 'rb') as file:
width = int.from_bytes(file.read(4), byteorder=byte_order)
height = int.from_bytes(file.read(4), byteorder=byte_order)
# count = width * height
data = np.zeros((height, width, 3), np.float32)
for h in range(height):
for w in range(width):
r = struct.unpack('f', file.read(4))[0]
g = struct.unpack('f', file.read(4))[0]
b = struct.unpack('f', file.read(4))[0]
# if r == 0.0 and g == 0.0 and b == 0.0:
# count -= 1
a = file.read(4)
data[height - 1 - h, w, 0] = r
data[height - 1 - h, w, 1] = g
data[height - 1 - h, w, 2] = b
# print(count)
return data
def render():
# Image's (0, 0) is at upper left corner
# (height, width, color channel)
# bin data's (0, 0) is at lower left
# filenames = os.listdir(dir_path)
# for filename in filenames:
# if filename.endswith('.bin'):
# file_path = os.path.join(dir_path, filename)
# data = read_bin(file_path)
# data = data * 255
# data = data.astype('uint8')
# img = Image.fromarray(data)
# print(filename)
# img.show(filename)
# break
filename = 'buddha_parallel_output.bin'
file_path = os.path.join(dir_path, filename)
data = read_bin(file_path)
data = data * 255
data = data.astype('uint8')
img = Image.fromarray(data)
# img.show(filename)
img.save('buddha_parallel_output.jpg')
def check_object_range():
path = '../data/regular/buddha_backlight_front_position.bin'
data = read_bin(path)
height, width, _ = data.shape
min_vals = np.array([2**32, 2**32, 2**32])
max_vals = np.array([-2**32, -2**32, -2**32])
print(min_vals, max_vals)
for h in range(height):
for w in range(width):
val = data[h, w]
min_vals = [min(val[i], min_vals[i]) for i in range(3)]
max_vals = [max(val[i], max_vals[i]) for i in range(3)]
print(min_vals, max_vals)
if __name__ == '__main__':
# render()
check_object_range()