обнаруживать круги на изображении с помощью преобразования Hough Circle

Я пытаюсь обнаружить круги на следующем изображении, используя функцию Hough Circles OpenCV.

введите здесь описание изображения

Мой код (OpenCV с Python)

myImage = cv2.imread("C:\\sample.jpg") 
img = cv2.resize(myImage,(640,480))        
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(gray,cv2.cv.CV_HOUGH_GRADIENT,1,10, param1=50,param2=35,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(myImage,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow('detected circles',myImage)
cv2.waitKey(0)
cv2.destroyAllWindows()

Но по какой-то причине я не могу получить правильные результаты. Я получаю следующий вывод

введите здесь описание изображения

ОБНОВЛЕНИЕ

Спасибо теперь работает. Установив высокое значение param2, я могу обнаружить 2 круга. Я неправильно их отображал, и теперь все в порядке


person user1388142    schedule 26.04.2016    source источник
comment
это круги? кажутся мне эллипсами   -  person Micka    schedule 26.04.2016


Ответы (3)


Вы видимо неправильно указали координаты.

    # draw the outer circle
    cv2.circle(myImage,(i[1],i[0]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[1],i[0]),2,(0,0,255),3)

Измените это на

    # draw the outer circle
    cv2.circle(myImage,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(myImage,(i[0],i[1]),2,(0,0,255),3)
person Aswin P J    schedule 26.04.2016
comment
только что сделал это, но все равно вывод неправильный .. см. мое обновление - person user1388142; 26.04.2016
comment
вы изменили обе координаты? - person Aswin P J; 26.04.2016
comment
да плз посмотри новую картинку - person user1388142; 26.04.2016
comment
Пожалуйста, опубликуйте полный код. Всего обнаруживается 6 центров, при этом на изображении всего 4 объекта и только одна окружность. Что-то не так с кодом. Попробуйте изменить param1 и param2 на меньшие и большие значения. - person Aswin P J; 26.04.2016
comment
@user1388142 user1388142 Попробуйте увеличить параметр param2 до большого значения, скажем, 50 или 75, и посмотрите, что получится на выходе. - person Aswin P J; 26.04.2016

Ну, во-первых, максимальный радиус установлен на 0...

то есть ваш диапазон 0 ‹ радиус ‹ 0.

Если я не ошибаюсь (?), это немного ограничительно, да?

person Lamar Latrell    schedule 26.04.2016
comment
afaik 0 означает отсутствие ограничений, поэтому алгоритм должен учитывать ВСЕ размеры. - person Micka; 26.04.2016

Вы показываете исходное изображение cv2.imshow('detected circles',myImage), но круги вычисляются поверх серого изображения с повторным масштабированием. Изменять

cv2.imshow('detected circles',myImage)

для

cv2.imshow('detected circles',img)

и все готово.

person Charles Martin    schedule 25.03.2019