@Vladislave_P

Как найти окружности на изображении opencv python?

решил написать бота для игры "SpaceFligting Simulator", но возникла проблема. Мне надо чтобы бот определял 2 окружности, одна окружность будет лежать на радиусе другой окружности. Пытался сделать через модуль "HoughCircles" в opencv, но смог добиться только того что он определяет большую окружность, так как первый раз работаю с этим модулем и не смог разобраться до конца.
на фото 2 окружности которые нужно найти.
img = cv.imread(r'img\game_circle_test.png', 0)
img = cv.medianBlur(img, 3)
cimg = cv.cvtColor(img, cv.COLOR_GRAY2BGR)
cimg = cv.threshold(cimg, 17, 55, cv.THRESH_BINARY)[1]
circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 500,
                                  param1=100, param2=30, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
# draw the outer circle
cv.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
# draw the center of the circle
cv.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)

cv.imshow('detected circles', cimg)

63d40cce2e7b7306687745.png
  • Вопрос задан
  • 289 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Можешь попробовать фильтр Кэнни для поиска границ, и искать окружности по результату.
Так или иначе, тебе потребуется получить изображение, где как можно чётче видны нужные тебе элементы, и как4 можно хуже - всё остальное.
И да, в приведённом коде кривые отступы. он не запустится.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Если синий космический корабль всегда лежит в центре большой окружности - то я-бы искал его. Его паттерн - проще. А большой круг такой слабый что преобразование хафа наверное его видит как рандомный шум. Надо как-то усилить контраст или threashold чтобы она проявилась.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы