forked from grschafer/BejeweledBot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SceneLoader.py
102 lines (79 loc) · 2.9 KB
/
SceneLoader.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
File SceneLoader.py created on 11:30 2017/9/9
@author: Yichi Xiao
@version: 1.0
"""
import numpy as np
import cv2
from matplotlib import pyplot as plt
def img2tensor(image):
np_image_data = np.asarray(image)
np_image_data = cv2.normalize(np_image_data.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX)
print(np_image_data.shape)
print(np_image_data[:, :, 1])
def img_generator(img):
img = img[45:661, 313:929]
print(img.shape)
sprite_size = (int(img.shape[0]/8), int(img.shape[1]/8))
print(sprite_size)
for x in range(8):
for y in range(8):
sprite = img[(x*sprite_size[0]):((x+1)*sprite_size[0]),
(y*sprite_size[1]):((y+1)*sprite_size[1])]
sprite = cv2.resize(sprite, (32, 32))
yield sprite
fig = plt.figure()
img = cv2.imread('video/Gem.jpg')
img_array = np.array([]).reshape((0, 32, 32, 3))
for idx, sprite in enumerate(img_generator(img)):
k = fig.add_subplot(8, 8, idx+1)
k.imshow(cv2.cvtColor(sprite, cv2.COLOR_BGR2RGB))
img_array = np.concatenate((img_array, sprite[np.newaxis, ...]), axis=0)
# img_label = np.append(img_label, [0])
img_label = np.zeros((img_array.shape[0],), dtype=np.int8)
print(img_array.shape)
print(img_label.shape)
np.save('img_data/sample64.npy', img_array)
img_array = np.load('img_data/sample64.npy')
img_label = np.load('img_data/label64.npy') # to do if not exists
plt.xticks([]), plt.yticks([])
#plt.show()
def mouse_event(event, x, y, flags, param):
global ctrl_mode
if flags & cv2.EVENT_FLAG_RBUTTON != 0:
ctrl_mode = 1
else:
ctrl_mode = 0
if event == cv2.EVENT_LBUTTONDOWN:
idx = int(x/40) + int(y/40) * 8
if idx >= 64:
return
img_label[idx] = crt_label
print('x=',x,'y=',y,'idx=',idx)
tag_image = np.zeros((320 + 100, 320, 3), np.uint8)
crt_label = 0
ctrl_mode = 0
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.namedWindow('Tagging')
cv2.setMouseCallback('Tagging', mouse_event)
while(1):
tag_image = np.zeros((320 + 100, 320, 3), np.uint8)
for idx in range(8 * 8):
sprite = img_array[idx]
_x, _y = int(idx / 8), int(idx % 8)
if ctrl_mode == 0 or img_label[idx] == crt_label:
tag_image[(_x * 40 + 4):(_x * 40 + 36), (_y * 40 + 4):(_y * 40 + 36)] = sprite
if img_label[idx] == crt_label and ctrl_mode == 0:
cv2.rectangle(tag_image, (_y * 40 + 4, _x * 40 + 4), (_y * 40 + 36, _x * 40 + 36), (0, 255, 0), 2)
cv2.putText(tag_image, 'Current label = %s' % crt_label, (5, 360), font, 1.0, (0, 255, 0), 2)
cv2.imshow('Tagging', tag_image)
key = cv2.waitKey(200) & 0xFF
if (key >= ord('0') and key <= ord('9')):
crt_label = key - ord('0')
print('key=', key, 'chr(key)=', chr(key))
if key == 27:
break
cv2.destroyAllWindows()
np.save('img_data/label64.npy', img_label)