2017-10-16 105 views
2

我的目标是尽量在下面的框架隔离法庭,并概述其: enter image description here如何使用OpenCV更有效地隔离篮球场?

我使用OpenCV进行Python和这里采取以下步骤后,我的结果:

  1. 一个给定的色相范围
  2. 开发一个位与内部的图像转换为HSV
  3. 隔离像素掩模
  4. 使用Canny边缘检测

这里是我的面具: enter image description here

这里是从我的Canny边缘检测结果: enter image description here

正如你看到的,我的坎尼探测器表现非常糟糕,有很多的噪音在我的面具。我尝试了一些技术,包括侵蚀和扩张,但他们没有太多帮助。

我还能做些什么来确保何时将面罩传递给Hough Line Transformer,它实际上能够检测到法院的边缘?

这里是参考一些代码:

img = cv2.imread('imgs/bulls.jpg') 
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 

court_color = np.uint8([[[160,221,248]]]) 
hsv_court_color = cv2.cvtColor(court_color, cv2.COLOR_BGR2HSV) 
hue = hsv_court_color[0][0][0] 

# define range of blue color in HSV 
lower_color = np.array([hue - 10,10,10]) 
upper_color = np.array([hue + 10,255,255]) 

# Threshold the HSV image to get only blue colors 
mask = cv2.inRange(hsv_img, lower_color, upper_color) 

# Bitwise-AND mask and original image 
res = cv2.bitwise_and(img,img, mask= mask) 

plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original Image'), plt.show() 
plt.imshow(mask, cmap='Greys'), plt.title('Mask'), plt.savefig('imgs/mask.jpg'), plt.show() 

# Erosion 
kernel = np.ones((2,2),np.uint8) 
erosions2 = cv2.erode(mask,kernel,iterations = 5) 

# Dilation 
dilation = cv2.dilate(mask,kernel,iterations = 3) 

# Opening 
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) 

# Closing 
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) 

编辑:我试图复制这一研究:web.stanford.edu/class/ee368/Project_Spring_1415/Reports/...。我希望通过检测勾画出直线的直线来隔离球场,以便我最终可以使用单应性来找到场上球员的坐标。

+0

实际上你想在最后得到什么?你需要一个框架的面具? –

+0

@SergAnuke我试图复制这项研究:https://web.stanford.edu/class/ee368/Project_Spring_1415/Reports/Cheshire_Halasz_Perin.pdf。我希望通过检测勾画出直线的直线来隔离球场,以便我最终可以使用单应性来找到场上球员的坐标。 – haroon7

回答

1

在这种情况下,检测图像上的霍夫线是最好的选择,因为宫廷颜色可能会因地点和摄像机设置而发生变化。检测线条,以及使用统一颜色补丁的一些进一步处理应该允许您以一定的准确度对法院区域进行细分。

+0

唯一的问题是,除非我能够尽可能地将法院与框架的其余部分隔离,否则会有很多噪音。我目前正在努力寻找孤立法庭的最佳方法,并且无法摆脱人群中的噪音以及每个框架中的其他不相关物体。 – haroon7