Change language

Finding Circles Using OpenCV | python

| | | | |

Basics of Circle Detection

A circle can be described by the following equation:

To detect circles, we can fix point (x, y). Now we need to find 3 parameters: a, b and r. So the problem is in the 3D search space. To find possible circles, the algorithm uses a three-dimensional matrix called the Accumulator Matrix to store the potential values ​​of a, b, and r. The value of a (center x coordinate) can range from 1 to rows, b (center y coordinate) can range from 1 to columns, and r can range from 1 to maxRadius = ,

Below are the steps of the algorithm.

  • Accumulator matrix initialization: Dimension row matrix initialization * cols * maxRadius with zeros.
  • Image preprocessing: Apply to the image blur, grayscale and edge detector. This is done to make the circles look like darkened edges of the image.
  • Loop through points: select point in the image.
  • Fixing r and looping through a and b: use a double nested loop to find the value of r by varying a and b in the given ranges.

    for a in range (rows):

    for b in range (cols):

      r = ma th. sqrt ((xi - a) * * 2 + (yi - b) * * 2 )

    accum_matrix [a] [b] [r] + = 1

  • Voting: Select the points in the battery matrix with the maximum value. These are strengths that indicate the existence of a circle with parameters a, b and r. This gives us the space of the circles.
  • Finding circles: Finally, using the above circles as candidates, vote according to the image. The maximum circle of voted in the accumulator matrix gives us a circle.

The HoughCircles function in OpenCV has the following parameters, which can be changed according to the image.

Detection Method: OpenCV has an advanced implementation, HOUGH_GRADIENT, which uses gradient of the edges instead of filling up the entire 3D accumulator matrix, thereby speeding up the process.
dp: This is the ratio of the resolution of original image to the accumulator matrix.
minDist: This parameter controls the minimum distance between detected circles.
Param1: Canny edge detection requires two parameters - minVal and maxVal. Param1 is the higher threshold of the two. The second one is set as Param1 / 2.
Param2: This is the accumulator threshold for the candidate detected circles. By increasing this threshold value, we can ensure that only the best circles, corresponding to larger accumulator values, are returned.
minRadius: Minimum circle radius.
maxRadius: Maximum circle radius.

Below is the code for finding circles using OpenCV in the image above.

import cv2

import numpy as np

 
# Read the image.

img = cv2.imread ( ’eyes.jpg’ , cv2.IMREAD_COLOR)

  
# Convert to from shades of gray.

gray = cv2. cvtColor (img, cv2.COLOR_BGR2GRAY)

 
# Blur using core 3 * 3.

gray_blurred = cv2.blur (gray, ( 3 , 3 ))

 
# Apply Hough transform to blurry image .

detected_circles = cv2.HoughCircles ( gray_blurred, 

cv2.HOUGH_GRADIENT, 1 , 20 , param1 = 50 ,

  param2 = 30 , minRadius = 1 , maxRadius = 40 )

 
# Draw the circles that are found.

if detected_circles is not None :

 

  # Convert circle parameters a, b and r to integers.

  detected_circles = np.uint16 (np.around (detected_circles))

 

for pt in detected_circles [ 0 ,:]:

a, b, r = pt [ 0 ], pt [ 1 ], pt [ 2 ]

 

# Draw a circle.

cv2.circle (img, (a, b), r, ( 0 , 255 , 0 ), 2 )

 

  # Draw a small circle (radius 1) to show the center.

cv2.circle (img, (a, b), 1 , ( 0 , 0 , 255 ), 3 )

cv2.imshow ( "Detected Circle" , img)

  cv2.waitKey ( 0 )

Exit:

Finding Circles Using OpenCV | python circle: Questions

Finding Circles Using OpenCV | python find: Questions

Shop

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Best laptop for Minecraft

$590

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method