GOOGLE ADS

воскресенье, 8 мая 2022 г.

Найдите углы бильярдного стола для деформации перспективы с помощью OpenCV

У меня есть изображение бильярдного стола с небольшим искажением перспективы:

Изображение бильярдного стола

Я пытаюсь развернуть изображение (так, чтобы углы бильярдного стола соответствовали углам моего выходного изображения), а затем обнаружить бильярдные шары на выходном изображении. Чтобы развернуть стол, я намереваюсь использовать cv2.PerspectiveTransform()для получения матрицы преобразования, которая отображает углы бильярдного стола в углы моего выходного изображения. Однако у меня нет расположения углов моего стола; Я хочу найти углы программно.

До сих пор я применял маску (которая отфильтровывает все, кроме бильярдного стола). После применения маски я применил детектор краев Canny, чтобы найти только края бильярдного стола:

Край бильярдного стола

Моя идея состояла в том, чтобы использовать алгоритм преобразования линии Хафа для поиска линий, соответствующих краям бильярдного стола (чтобы программно найти углы бильярдного стола), но алгоритм преобразования линии Хафа, похоже, с трудом обнаруживает края.. Как мне отсюда найти углы бильярдного стола?

РЕДАКТИРОВАТЬ

Можно ли как-то просто извлечь острые углы контура (восемь точек, соответствующих тому, где прямые края превращаются в карманы)?


Решение проблемы

Углы можно получить только путем экстраполяции прямых сторон.

Вы можете начать с обертывания контура прямоугольником минимальной площади, чтобы получить грубое приближение. Из этого приближения вы можете извлечь участки контура, которые являются довольно прямыми (используя предопределенную маску), и выполнить на них подгонку линий.

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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...