Source code for neodroidvision.utilities.opencv_utilities.calibrators.hough_circle_calibration

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "heider"
__doc__ = r"""

           Created on 5/5/22
           """

from pathlib import Path

import cv2
from draugr.opencv_utilities import add_trackbar, show_image

__all__ = ["hough_circle_calibrator"]


[docs]def hough_circle_calibrator( frame, ) -> None: # TODO: GENERALISE INTERACTIVE CALIBRATOR TO MANY MORE OPENCV FUNCTIONS """description""" a_key_pressed = None # .init edges = None lo_label = "Lo_Threshold" lo = 127 lo_prev = -1 hi_label = "Hi_Threshold" hi = 255 hi_prev = -1 dp_label = "dp" dp = 1 dp_prev = -1 min_distance_label = "min_distance" min_distance = 10 min_distance_prev = -1 param1_label = "param1" param1 = 255 param1_prev = -1 param2_label = "param2" param2 = 20 param2_prev = -1 min_radius_label = "min_radius" min_radius = 10 min_radius_prev = -1 max_radius_label = "max_radius" max_radius = 30 max_radius_prev = -1 frame_window_label = "Frame" canny_frame_window_label = f"{frame_window_label}.Canny" canny_hough_circle_window_label = f"{canny_frame_window_label}.Circles" show_image(frame, frame_window_label) show_image(frame, canny_frame_window_label) add_trackbar(canny_frame_window_label, lo_label, default=lo, max_val=1000) add_trackbar(canny_frame_window_label, hi_label, default=hi, max_val=1000) show_image(frame, canny_hough_circle_window_label) add_trackbar( canny_hough_circle_window_label, dp_label, default=dp, min_val=1, max_val=20 ) add_trackbar( canny_hough_circle_window_label, min_distance_label, default=min_distance, min_val=1, max_val=1000, ) add_trackbar( canny_hough_circle_window_label, param1_label, default=param1, min_val=1, # Zero is not a valid value for this parameter ) add_trackbar( canny_hough_circle_window_label, param2_label, default=param2, min_val=1, # Zero is not a valid value for this parameter ) add_trackbar( canny_hough_circle_window_label, min_radius_label, default=min_radius, min_val=1 ) add_trackbar( canny_hough_circle_window_label, max_radius_label, default=max_radius, min_val=1 ) print( " --------------------------------------------------------------------------- press [ESC] to exit " ) while True: if a_key_pressed == 27: break lo = cv2.getTrackbarPos(lo_label, canny_frame_window_label) hi = cv2.getTrackbarPos(hi_label, canny_frame_window_label) if lo != lo_prev or hi != hi_prev: # --------------------------= RE-SYNC a_canny_refresh_flag = True # --------------------------= FLAG lo_prev = lo hi_prev = hi else: a_canny_refresh_flag = False # --------------------------= Un-FLAG dp = cv2.getTrackbarPos(dp_label, canny_hough_circle_window_label) min_distance = cv2.getTrackbarPos( min_distance_label, canny_hough_circle_window_label ) param1 = cv2.getTrackbarPos(param1_label, canny_hough_circle_window_label) param2 = cv2.getTrackbarPos(param2_label, canny_hough_circle_window_label) min_radius = cv2.getTrackbarPos( min_radius_label, canny_hough_circle_window_label ) max_radius = cv2.getTrackbarPos( max_radius_label, canny_hough_circle_window_label ) if ( dp != dp_prev or min_distance != min_distance_prev or param1 != param1_prev or param2 != param2_prev or min_radius != min_radius_prev or max_radius != max_radius_prev ): # ----------------------------------------------= RE-SYNC a_hough_refresh_flag = True # --------------------------= FLAG dp_prev = dp min_distance_prev = min_distance param1_prev = param1 param2_prev = param2 min_radius_prev = min_radius max_radius_prev = max_radius else: a_hough_refresh_flag = False # --------------------------= Un-FLAG if ( a_canny_refresh_flag ): # REFRESH-process-pipe-line ( with recent <state> <vars> ) edges = cv2.Canny(frame, lo, hi) cv2.imshow(canny_frame_window_label, edges) if a_canny_refresh_flag or a_hough_refresh_flag: circles = cv2.HoughCircles( edges, cv2.HOUGH_GRADIENT, dp=dp, minDist=min_distance, param1=param1, param2=param2, minRadius=min_radius, maxRadius=max_radius, ) demo_with_circles = cv2.cvtColor( frame, cv2.COLOR_BGR2RGB ) # .re-init <<< src demo_with_circles = cv2.cvtColor(demo_with_circles, cv2.COLOR_RGB2BGR) if circles is not None: for c in circles[0]: cv2.circle( demo_with_circles, (int(c[0]), int(c[1])), int(c[2]), (0, 255, 0), 1, ) cv2.imshow(canny_hough_circle_window_label, demo_with_circles) a_key_pressed = cv2.waitKey(1) & 0xFF cv2.destroyWindow(frame_window_label) cv2.destroyWindow(canny_frame_window_label) cv2.destroyWindow(canny_hough_circle_window_label)
# cv2.destroyAllWindows() if __name__ == "__main__": def ijasd(): """description""" from draugr.opencv_utilities import clean_up orig = cv2.imread( str(Path(r"C:\Users\Christian\OneDrive\Billeder\buh\7BIsT.png")) )[:800, :800, :] cleaned = clean_up(orig) hough_circle_calibrator(cleaned) ijasd()