def get_center_scale(self, calibration_image):
"""
:param calibration_image: The HSV-image to use for calculation
:return: Position of center point in image (tuple), ratio px per cm (reproduction scale)
"""
gray = cv2.cvtColor(calibration_image, cv2.COLOR_HSV2BGR)
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 1)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param1=50, param2=30, minRadius=50, maxRadius=300)
center_circle = (0, 0, 0)
min_dist = 0xFFFFFFFFFFF
for circle in circles[0]:
dist_x = abs(circle[0] - calibration_image.shape[1] / 2)
dist_y = abs(circle[1] - calibration_image.shape[0] / 2)
if(dist_x + dist_y) < min_dist:
min_dist = dist_x + dist_y
center_circle = circle
rgb = cv2.cvtColor(calibration_image, cv2.COLOR_HSV2RGB)
cv2.circle(rgb, (center_circle[0], center_circle[1]), center_circle[2], (0, 255, 0), 1)
center = center_circle[0], center_circle[1]
radius = center_circle[2]
ratio_pxcm = radius / 10.25
self.center = center
self.ratio_pxcm = ratio_pxcm
return [center, ratio_pxcm]
评论列表
文章目录