2017-10-16 66 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