使用Hough Circle变换从图像中检测圆圈

时间:2016-04-26 02:37:10

标签: python opencv hough-transform

我正在尝试使用OpenCV的Hough Circles功能从下图中检测圆圈

enter image description here

我的代码(OpenCV with Python)

myImage = cv2.imread("C:\\sample.jpg") 
img = cv2.resize(myImage,(640,480))        
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(gray,cv2.cv.CV_HOUGH_GRADIENT,1,10, param1=50,param2=35,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(myImage,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('detected circles',myImage)
cv2.waitKey(0)
cv2.destroyAllWindows()

但由于某种原因,我无法获得正确的输出。我得到以下输出

enter image description here

更新

谢谢它现在正在工作。通过设置param2高,我能够检测到2个圆圈。我错误地展示了它们,现在一切都很好

3 个答案:

答案 0 :(得分:1)

您似乎错误地给出了坐标。

    # draw the outer circle
    cv2.circle(myImage,(i[1],i[0]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[1],i[0]),2,(0,0,255),3)

将其更改为

    # draw the outer circle
    cv2.circle(myImage,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[0],i[1]),2,(0,0,255),3)

答案 1 :(得分:1)

嗯,有一件事是最大半径设置为0 ......

即。你的范围是0 <半径&lt; 0

除非我弄错了(?),这有点限制性,是吗?

答案 2 :(得分:0)

您正在显示原始图像cv2.imshow('detected circles',myImage),但是圆圈是在灰度的灰色刻度图像上计算的。更改

cv2.imshow('detected circles',myImage)

对于

cv2.imshow('detected circles',img)

您完成了。