I have followed OpenCV's tutorial here for circle detection on my Raspberry Pi. This is the code that I am using which is the same as the tutorial except a different image.
import cv2
import numpy as np
img = cv2.imread('watch.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('image',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Then when I ran the script this is what I was presented with this
and this is the original image
What is causing this to happen?
Thank You in Advance!
Edit:
The large amount of circles generated by Hough Circle Transform is caused by the low value of the threshold for center detection, which is param2
in cv2.HoughCircles
in your case.
So try to increase the value of param2
to avoid false detections.
Also you can adjust minRadius
and maxRadius
values for better results.
EDIT:
I have just tried example from here and changed only param2
to 10
, minRadius
to 30
and maxRadius
to 50
. The result is good enough:
The example from the link above is written with C++, but you can compare parameters and the sequence of functions invocations to refine your own algorithm.