我想分析冰球图像并希望获得比赛场地上的各种线条。例如,我需要能够获得只有蓝线的图像。我尝试将rgb
图片转换为hsv
格式,并尝试指定通过蒙版允许每个像素的hsv
之间的限制。然后我将蒙版应用于图像。我只获得了令人满意的输出。如何使输出更好?我尝试更改hsv
范围,但对一张图片产生正面影响会对另一张图片产生负面影响。
代码:
import cv2
import numpy as np
# Take each frame
frame = cv2.imread('image_name')
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of color in HSV
#blue
lower = np.array([110,50,50])
upper = np.array([130,255,255])
# Threshold the HSV image to get only colors
mask = cv2.inRange(hsv, lower, upper)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
cv2.waitKey(0)
输出:
Picture 1 - Image 1 with upper and lower limits as shown in code
Picture 2 - Image 2 with upper and lower limits as shown in code
Picture 3 - Image 1 with upper limit as [130,255,255] and lower limit as [110,20,50] respectively
Picture 4 - Image 2 with upper limit as [130,255,255] and lower limit as [110,20,50] respectively
图3和图4:
(对不起,它不允许我发布超过2张图片)
可以看出,在图1中,蓝线完全没有实线并且包含许多间隙。然而,当我尝试改变下限的饱和度时,图像2的差异太大,图4中可以看到,尽管图像1的蓝线更加坚固,如图3所示。
如何正确检测线条并以稳固的方式获取线条?我只需要线条。请记住,场上的一些线条也有轻微的曲线。如果提议的解决方案也适用于它们,那将是很好的。
这是继续进行还是有更好的方法?我最终想要得到场上各条线的方程式。