def get_angle(self, calibration_image):
"""
:param calibration_image: The HSV-image to use for calculation
:return: Rotation angle of the field in image
"""
# TODO: correct return value comment?
rgb = cv2.cvtColor(calibration_image, cv2.COLOR_HSV2BGR)
angle = 0
count = 0
gray = cv2.cvtColor(cv2.cvtColor(calibration_image, cv2.COLOR_HSV2BGR), cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 110)
if lines.shape[0]:
line_count = lines.shape[0]
else:
raise Exception('field not detected')
for x in range(line_count):
for rho, theta in lines[x]:
a = np.cos(theta)
b = np.sin(theta)
# print(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*a)
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*a)
corr_angle = np.degrees(b)
if corr_angle < 5:
# print(CorrAngle)
angle = angle + corr_angle
count = count + 1
cv2.line(rgb, (x1, y1), (x2, y2), (0, 0, 255), 2)
print(angle)
if isinstance(angle, int) and isinstance(count, int):
angle = angle / count
self.angle = angle
return angle
else:
self.angle = 0.1
return False
评论列表
文章目录