编程语言
首页 > 编程语言> > python – 为什么一个圆圈不会被HoughCircles检测到? minDist如何工作?

python – 为什么一个圆圈不会被HoughCircles检测到? minDist如何工作?

作者:互联网

我试图使用HoughCircles检测下图中的圆圈.

enter image description here

这是我正在调整以找到所有圈子的代码.

    import cv2
    import numpy as np


    img = cv2.imread("images/coins.jpg", 0)

    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

    minDist = 247

    circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
                                param1=170,param2=80,minRadius=0,maxRadius=0)


    print(circles)

    #print("Number of circles detected ", circles.length)


    circles = np.uint16(np.around(circles))

    for i in circles[0,:]:
        # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
        # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)


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

对于我尝试的一切,我无法检测到一枚硬币.检测到的圆圈如下所示.

enter image description here

我这里有三个问题:

>第一排左起第二枚硬币未检测到的原因是什么?
> minDist参数有什么作用?你能解释一下它的工作原理吗?我阅读了文档,但无法理解.
> minRadius和maxRadius为零的含义是什么?

解决方法:

>第一排左起第二枚硬币未检测到的原因是什么?

>由于canny边缘检测参数:param1,未检测到第二个硬币.
降低param1的价值,你会得到一个完美的答案.

> minDist参数有什么作用?你能解释一下它的工作原理吗?我阅读了文档,但无法理解.

>根据文档,minDist是2个圆圈之间的最小值.如果减小minDist的值,您将获得多个邻居圈.

> minRadius和maxRadius为零的含义是什么?

> minRadius最小圆半径.
> maxRadius最大圆半径.如果< = 0,则使用最大图像尺寸.如果< 0,返回中心而不查找半径. 这是完整的代码:

import cv2
import numpy as np


img = cv2.imread("coins.jpg", 0)

cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

minDist = 247

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
                param1=150,param2=80,minRadius=0,maxRadius=0)


print(circles)

#print("Number of circles detected ", circles.length)


circles = np.uint16(np.around(circles))

for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

##cv2.imwrite('detected_circle.jpg',cimg)
cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里你可以看到我也得到了第二枚硬币.
enter image description here

标签:python,opencv,computer-vision,hough-transform
来源: https://codeday.me/bug/20190522/1152431.html