首页 > 解决方案 > 检测网球场线

问题描述

我试图检测网球场上的线条。到目前为止使用了 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

关于如何改善结果的任何想法?

标签: pythonopencvimage-processinghoughlines

解决方案


您可以做的一件事是创建一个算法来分类一条线是否实际上是一条网球场线。您的程序似乎正在寻找图像中的任何线条,因此它会为您提供出现在图像中但不是网球场线的线条。也许使用监督学习来创建一个模型,将这些线作为输入并将它们分类为网球场线或非网球场线。你只能做一件事。它不会帮助您处理未检测到的行,但它会过滤掉错误检测到的行


推荐阅读