Обнаружение линий теннисного корта - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь обнаружить линии на теннисном корте. До сих пор использовались преобразования Canny Edge и HoughLines.

import cv2
import numpy as np

img = cv2.imread('./images/tennis.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

lines = cv2.HoughLines(edges,1,np.pi/180,200)
i = 0

for line in lines:
    if i < 10:
        for rho,theta in line:
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a*rho
            y0 = b*rho
            x1 = int(x0 + 1000*(-b))
            y1 = int(y0 + 1000*(a))
            x2 = int(x0 - 1000*(-b))
            y2 = int(y0 - 1000*(a))

            cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
        i += 1

cv2.imwrite('houghlines.jpg',img)

Но пока результат не очень удовлетворительный:

Вывод: https://imgur.com/t8ZBSKM

Ввод: https://imgur.com/yPpObbD

Есть идеи, как улучшить результат?

1 Ответ

0 голосов
/ 02 августа 2020

Вы могли бы создать алгоритм, который определял бы, действительно ли линия является линией теннисного корта. Кажется, ваша программа ищет любую линию на изображении, поэтому она дает вам линии, которые появляются на изображении, но не являются линиями теннисного корта. Возможно, используйте контролируемое обучение, чтобы создать модель, которая принимает эти линии в качестве входных данных и классифицирует их как линию теннисного корта или не линию теннисного корта. Ты мог сделать только одно. Это не поможет вам с необнаруженными строками, но отфильтрует неправильно обнаруженные строки

...