Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

circle detection in open cv using python

I was trying to detect circles from a black background with red circular kind objects.

import cv2
import cv2.cv as cv
import numpy as np

img = cv2.imread('extracted.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,20,
                        param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint8(np.around(circles))
for i in circles[0,:]:
   # draw the outer circle
   cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
   # draw the center of the circle
   cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

I have loaded the image in grayscale mode,still it gives me an error

"circles = np.uint8(np.around(circles))
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 2277, in around
  return _wrapit(a, 'round', decimals, out)
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 37, in _wrapit
  result = getattr(asarray(obj),method)(*args, **kwds)
AttributeError: rint"

I cannot post the image because of my present reputation.

like image 582
Anuradha Avatar asked Feb 20 '14 06:02

Anuradha


1 Answers

There is a small correction to be made in your code.

You are loading image in grayscale, and then again converting it to grayscale using cv2.cvtColor which is invalid operation.

Alternatively, OpenCV provides a sample for circle detection using Hough Circles method. You can try that.

If you are using OpenCV 2.x version, just change the cv2.LINE_AA to cv2.CV_AA or any other lineType you prefer.

like image 140
Abid Rahman K Avatar answered Oct 15 '22 08:10

Abid Rahman K