Почему один круг остается незамеченным HoughCircles?Как работает minDist? - PullRequest
0 голосов
/ 26 января 2019

Я пытался определить круги на следующем изображении, используя 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 из zero?

1 Ответ

0 голосов
/ 26 января 2019
  1. В чем может быть причина того, что вторая монета слева в первом ряду не была обнаружена?

    • Вторая монета не обнаружена из-за обнаружения края хитройпараметр: param1.Уменьшите значение param1, и вы получите идеальный ответ.
  2. Что делает параметр minDist?Не могли бы вы объяснить, как это работает?Я прочитал документацию, но не смог понять.

    • А согласно документации minDist - это минимальное значение между 2 кружками.Если вы уменьшите значение minDist, вы получите несколько соседних кругов.
  3. Что здесь означают minRadius и maxRadius из zero?

    • 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

...