OpenCV中使用Python进行圆形检测

7

我试图从黑色背景中检测出带有红色圆形物体的圆形。

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()

我已将图像加载到灰度模式,但仍然出现错误。
"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"

由于我的声誉不足,我无法发布图片。


请忽略缩进错误。 - Anuradha
尝试这段代码:https://github.com/Itseez/opencv/blob/master/samples/python2/houghcircles.py - Abid Rahman K
Abid谢谢,我尝试了这段代码,但它给出了以下错误:cv2.circle(cimg, (circles[0][i][0], circles[0][i][1]), circles[0][i][2], (0, 0, 255), 3, cv.LINE_AA) AttributeError: 'module'对象没有属性'LINE_AA'。 - Anuradha
1
只需删除那个 cv2.LINE_AA - Abid Rahman K
非常感谢,Abid,它有效了。我该如何设置要检测的最小和最大半径?这意味着哪个参数表示它? - Anuradha
显示剩余3条评论
1个回答

26

你的代码需要进行一个小修改。

你正在以灰度方式加载图像,然后再使用cv2.cvtColor将其转换为灰度,这是无效的操作。

另外,OpenCV提供了使用Hough圆方法进行圆形检测的示例。你可以尝试一下。

如果你使用的是OpenCV 2.x版本,只需将cv2.LINE_AA更改为cv2.CV_AA或任何其他你喜欢的线型。


你发布的链接已经失效了。 - Kapocsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接