我正在研究使用足球比赛的视频,并尝试使用单应性将帧映射到球场的俯视图。我已经开始使用霍夫线以及线段检测器找到帧中的所有白线,其中线段检测器似乎工作得稍微好一些。请参阅下面我的代码和示例:
import cv2
import numpy as np
cv2.imread("frame-27.jpg")
hsv = cv2.cvtColor(frame, cv2.COLOR_RGB2HSV)
mask_green = cv2.inRange(hsv, (36, 25, 25), (86, 255, 255)) # green mask to select only the field
frame_masked = cv2.bitwise_and(frame, frame, mask=mask_green)
gray = cv2.cvtColor(frame_masked, cv2.COLOR_RGB2GRAY)
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
canny = cv2.Canny(gray, 50, 150, apertureSize=3)
# Hough line detection
lines = cv2.HoughLinesP(canny, 1, np.pi / 180, 50, None, 50, 20)
# Line segment detection
lines_lsd = lsd.detect(canny)[0]
这使用这个输入框架
并返回该图像的霍夫线
该图像用于线段检测。
我的问题有两个:(1)关于如何进一步完善线检测的任何想法(即减少误报,例如球员周围和场外的线)和(2)使用检测线创建一个好的方法单应性,这样我就可以将框架映射到该领域的更高概述(像这样 https://i.stack.imgur.com/VmFdA.png)。任何帮助是极大的赞赏!