Python OpenCV获取特定HSV范围内的行

时间:2017-05-24 00:04:12

标签: python opencv computer-vision

我想分析冰球图像并希望获得比赛场地上的各种线条。例如,我需要能够获得只有蓝线的图像。我尝试将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

enter image description here enter image description here

图3和图4:

Picture 3 Picture 4

(对不起,它不允许我发布超过2张图片)

可以看出,在图1中,蓝线完全没有实线并且包含许多间隙。然而,当我尝试改变下限的饱和度时,图像2的差异太大,图4中可以看到,尽管图像1的蓝线更加坚固,如图3所示。

如何正确检测线条并以稳固的方式获取线条?我只需要线条。请记住,场上的一些线条也有轻微的曲线。如果提议的解决方案也适用于它们,那将是很好的。

这是继续进行还是有更好的方法?我最终想要得到场上各条线的方程式。

0 个答案:

没有答案