python - 在OpenCV的HoughCircles方法中确定参数

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

最佳答案

你见过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/

相关文章:

python - 增加字典中计数器的最快方法

python - 如何改进 pygame 中 3d 空间的模拟?

python - 为什么ndarray显示为黑色图像?

opencv - 降采样但不完全划分的影响

c++ - OpenCV 错误:断言在 cv::Mat 行 522 中失败

python - subDAG 在 Airflow 中到底是如何工作的?启用 subDAG 意味着什么?

python - 获取元组列表第一个索引?

python - 动态重新定义 numpy 数组

ios - 如何按位置对矩形数组进行排序?

java - 使用 RGB 图像创建 HSV 直方图