我正在尝试检测图像中的圆圈,并且正在使用 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()
最佳答案
你见过http://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/吗? ?
那里的作者建议修改 minDist,作为最重要的参数,但您将其设置为 1,因此我们应该期望误报而不是未找到的圆圈。 我还建议将 param1 增加到 200 以设置内部 Canny 边缘检测器的上限阈值以增加检测。
我还发现一些人报告了奇怪的异常现象,即增加最大半径会导致圆圈变少。有时将可选参数保留为默认值(值 0)是个好主意。
根据我使用 openCV 的经验,它通常以修改参数来获得最佳结果而告终。
关于python - 在OpenCV的HoughCircles方法中确定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193928/