确定OpenCV的HoughCircles方法中的参数

时间:2016-05-12 17:38:59

标签: python opencv

我正在尝试检测图像中的圆圈,并且正在使用OpenCV Python。当我使用HoughCircles方法时,我遇到了问题。我使用的是以下custom image,但我的代码无法检测到这两个圈子。

我尝试了以下实现

circles = cv2.HoughCircles(thresh1,cv2.cv.CV_HOUGH_GRADIENT,2,1,param1=100,param2=100,minRadius=0,maxRadius=1000)

这只是正确检测图像中较大的圆圈。我很确定如果我修改参数,我可能会找到一个有效的组合,但是有什么方法可以计算,或者找出参数,给出一个图像?

修改

以下是我编写的完整代码:

import cv2
import numpy as np

def show(s , i):
cv2.imshow(s , i)
cv2.waitKey(0)
cv2.destroyAllWindows()

img = cv2.imread('ball2.jpg')
show("img" , img)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh1 = cv2.threshold(cimg,10,255,cv2.THRESH_BINARY)
show('thresh' , thresh1)

circles = cv2.HoughCircles(thresh1,cv2.cv.CV_HOUGH_GRADIENT,2,1,param1=100,param2=100,minRadius=0,maxRadius=1000)
print circles
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(thresh1,(i[0],i[1]),i[2],(100,150,120),2)
    # draw the center of the circle
    cv2.circle(thresh1,(i[0],i[1]),2,(0,0,0),3)

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

1 个答案:

答案 0 :(得分:1)

你见过http://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/吗?

作者建议修补minDist,作为最重要的参数,但是你设置为1,所以我们应该期望误报而不是找不到的圈子。 我建议将param1增加到200,以设置内部Canny边缘检测器的上限阈值,以增加检测。

此外,我发现有些人报告了奇怪的异常现象,增加maxradius导致圈子减少。有时最好将可选参数保留为默认值(值0)。

根据我对openCV的经验,它经常以修补参数结束,以获得最佳效果。