我正在尝试检测图像中的圆圈,并且正在使用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()
答案 0 :(得分:1)
你见过http://www.pyimagesearch.com/2014/07/21/detecting-circles-images-using-opencv-hough-circles/吗?
作者建议修补minDist,作为最重要的参数,但是你设置为1,所以我们应该期望误报而不是找不到的圈子。 我建议将param1增加到200,以设置内部Canny边缘检测器的上限阈值,以增加检测。
此外,我发现有些人报告了奇怪的异常现象,增加maxradius导致圈子减少。有时最好将可选参数保留为默认值(值0)。
根据我对openCV的经验,它经常以修补参数结束,以获得最佳效果。