新手代码,写得很是鸡肋,仅为个人记录...有时间再进行优化...
def ratebox(img, box, angle):
(h, w) = img.shape[:2]
if angle < 0: #顺时针
flag = True
else:
flag = False
newlabel = []
x = 0
y = 0
for i in xrange(0, len(box) - 1, 2):
a = abs(h / 2 - box[i + 1])
b = abs(box[i] - w / 2)
b = fun(b) #避免分母为0的情况.
thta = 180 * math.atan(a / b) / math.pi
thta1 = thta + angle # 1 3 xx
thta2 = thta - angle # 2 4 xx
# >= <= 的等号千万不能漏了,不然就坑了...400.0 这样的整点坐标就没法读进来旋转!!!
if box[i] >= w / 2 and box[i + 1] <= h / 2:
print '1 xx'
y = abs(math.sin(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
x = abs(math.cos(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
if flag == True: #顺时针
if thta1 >= 0:
x = w / 2 + x
y = h / 2 - y
else:
x = w / 2 + x
y = h / 2 + y
else: #逆时针
if thta1 < 90:
x = w / 2 + x
y = h / 2 - y
else:
x = w / 2 - x
y = h / 2 - y
if box[i] <= w / 2 and box[i + 1] >= h / 2:
print '3 xx'
y = abs(math.sin(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
x = abs(math.cos(thta1 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
if flag == True: #顺时针
if thta1 >= 0:
x = w / 2 - x
y = h / 2 + y
else:
x = w / 2 - x
y = h / 2 - y
else: #逆时针
if thta1 < 90:
x = w / 2 - x
y = h / 2 + y
else:
x = w / 2 + x
y = h / 2 + y
if box[i] <= w / 2 and box[i + 1] <= h / 2:
print '2 xx'
y = abs(math.sin(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
x = abs(math.cos(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
if flag == True: #顺时针
if thta2 < 90:
x = w / 2 - x
y = h / 2 - y
else:
x = w / 2 + x
y = h / 2 - y
else: #逆时针
if thta2 >= 0:
x = w / 2 - x
y = h / 2 - y
else:
x = w / 2 - x
y = h / 2 + y
if box[i] >= w / 2 and box[i + 1] >= h / 2:
# print '4 xx'
# print 'thta: ', thta
# print 'thta2: ', thta2
y = abs(math.sin(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
x = abs(math.cos(thta2 * math.pi / 180) * np.sqrt(pow(a, 2) + pow(b, 2)))
# print i, box[i], box[i + 1], x, y
if flag == True: #顺时针
if thta2 < 90:
x = w / 2 + x
y = h / 2 + y
else:
x = w / 2 - x
y = h / 2 + y
else: #逆时针
if thta2 >= 0:
x = w / 2 + x
y = h / 2 + y
else:
x = w / 2 + x
y = h / 2 - y
if x < 0:
x = 0
if x > w:
x = w
if y < 0:
y = 0
if y > h:
y = h
newlabel.append(x)
newlabel.append(y)
return newlabel