У меня есть изображение бильярдного стола с небольшим искажением перспективы:
Я пытаюсь развернуть изображение (так, чтобы углы бильярдного стола соответствовали углам моего выходного изображения), а затем обнаружить бильярдные шары на выходном изображении. Чтобы развернуть стол, я намереваюсь использовать cv2.PerspectiveTransform()
для получения матрицы преобразования, которая отображает углы бильярдного стола в углы моего выходного изображения. Однако у меня нет расположения углов моего стола; Я хочу найти углы программно.
До сих пор я применял маску (которая отфильтровывает все, кроме бильярдного стола). После применения маски я применил детектор краев Canny, чтобы найти только края бильярдного стола:
Моя идея состояла в том, чтобы использовать алгоритм преобразования линии Хафа для поиска линий, соответствующих краям бильярдного стола (чтобы программно найти углы бильярдного стола), но алгоритм преобразования линии Хафа, похоже, с трудом обнаруживает края.. Как мне отсюда найти углы бильярдного стола?
РЕДАКТИРОВАТЬ
Можно ли как-то просто извлечь острые углы контура (восемь точек, соответствующих тому, где прямые края превращаются в карманы)?
Решение проблемы
Углы можно получить только путем экстраполяции прямых сторон.
Вы можете начать с обертывания контура прямоугольником минимальной площади, чтобы получить грубое приближение. Из этого приближения вы можете извлечь участки контура, которые являются довольно прямыми (используя предопределенную маску), и выполнить на них подгонку линий.
Комментариев нет:
Отправить комментарий