python - 检测网球场线
问题描述
我试图检测网球场上的线条。到目前为止使用了 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
关于如何改善结果的任何想法?
解决方案
您可以做的一件事是创建一个算法来分类一条线是否实际上是一条网球场线。您的程序似乎正在寻找图像中的任何线条,因此它会为您提供出现在图像中但不是网球场线的线条。也许使用监督学习来创建一个模型,将这些线作为输入并将它们分类为网球场线或非网球场线。你只能做一件事。它不会帮助您处理未检测到的行,但它会过滤掉错误检测到的行
推荐阅读
- apache-spark - 这个用例是否适合 Apache Spark?
- vba - 在 VBA 中抑制 PDF 转换错误消息
- c# - 由于 Microsoft.Toolkit.Uwp.UI.dll 上的错误,Uno 平台中的 WebAssembly 无法编译
- vue.js - 如何使用 Vue.js 跟踪谷歌分析活动
- javascript - React-Redux:如何从数组中添加每个项目
- powershell - 我们如何重新制作程序以运行并将新值保存在 c.csv 文件中?
- python - 乘法布尔矩阵
- typescript - 在打字稿项目中使用别名的问题
- python - 无法使用 DefaultAzureCredential 创建 DataFactoryManagementClient()?
- ios - 在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图?