-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathcrop.py
90 lines (64 loc) · 1.92 KB
/
crop.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
import numpy as np
import json
import matplotlib.pyplot as plt
import scipy.misc as misc
import cv2 as cv
for ii in xrange(3):
with open('data/original/'+str(ii)+'.json', 'r') as fid:
dat = json.load(fid)
pts = np.array(dat['hand_pts'])
image = misc.imread('data/original/'+str(ii) +'.jpg')
vsz, usz = image.shape[:2]
minsz = min(usz,vsz)
maxsz = max(usz,vsz)
kp_visible = (pts[:, 2] == 1)
uvis = pts[kp_visible,0]
vvis = pts[kp_visible,1]
umin = min(uvis)
vmin = min(vvis)
umax = max(uvis)
vmax = max(vvis)
B = round(2.2 * max([umax-umin, vmax-vmin]))
us = 0
ue = usz-1
vs = 0
ve = vsz-1
umid = umin + (umax-umin)/2
vmid = vmin + (vmax-vmin)/2
if (B < minsz-1):
us = round(max(0, umid - B/2))
ue = us + B
if (ue>usz-1):
d = ue - (usz-1)
ue = ue - d
us = us - d
vs = round(max(0, vmid - B/2))
ve = vs + B
if (ve>vsz-1):
d = ve - (vsz-1)
ve = ve - d
vs = vs - d
if (B>=minsz-1):
B = minsz-1
if usz == minsz:
vs = round(max(0, vmid - B/2))
ve = vs + B
if (ve>vsz-1):
d = ve - (vsz-1)
ve = ve - d
vs = vs - d
if vsz == minsz:
us = round(max(0, umid - B/2))
ue = us + B
if (ue>usz-1):
d = ue - (usz-1)
ue = ue - d
us = us - d
us = int(us)
vs = int(vs)
ue = int(ue)
ve = int(ve)
uvis = (uvis - us) * (319.0/(ue-us))
vvis = (vvis - vs) * (319.0/(ve-vs))
img = misc.imresize(image[vs:ve+1,us:ue+1,:], (320, 320), interp='bilinear')
misc.imsave('data/out/'+str(ii)+'.png',img)