我開始與OpenCV的項目,以準確檢測斯諾克球(檯球)的位置和輪廓。檢測斯諾克檯球
這些球:
我與幾個算法無濟於事實驗。這是我迄今爲止所做的:
- HoughCircles:這幾乎不起作用。即使將參數調整爲毫米分辨率,也只會導致檢測到幾個球,並且不能準確檢測球的中心。
- 坎尼:在這裏,我只能取回球的輪廓,如果球不是彼此接近。
- 顏色閾值HSV:因爲球不是一種顏色,這是行不通的。
我想試驗其他算法,如HaarCascadeDetection或SURF。
你們想什麼?
我開始與OpenCV的項目,以準確檢測斯諾克球(檯球)的位置和輪廓。檢測斯諾克檯球
這些球:
我與幾個算法無濟於事實驗。這是我迄今爲止所做的:
- HoughCircles:這幾乎不起作用。即使將參數調整爲毫米分辨率,也只會導致檢測到幾個球,並且不能準確檢測球的中心。
- 坎尼:在這裏,我只能取回球的輪廓,如果球不是彼此接近。
- 顏色閾值HSV:因爲球不是一種顏色,這是行不通的。
我想試驗其他算法,如HaarCascadeDetection或SURF。
你們想什麼?
我不是100%,它會工作,但試試看。我認爲如果相機不移動,您可以通過快速傅立葉變換來減輕這一點。請看看http://en.wikipedia.org/wiki/Convolution_theorem。你應該做的:
是的,相機不動。但是當一名球員出現在圖像中時會發生什麼?或者燈光強度變化? –
呵呵,在這種情況下可能這不是很好的解決方案。那麼你應該給更多的照片,是不是?我認爲你可以通過首先從圖像中提取漸變來改進我的算法(所以球的斑點會變成圓形,並且不應該使用斑點圖案,而應該使用圓形圖案,我相信這個問題可以通過這種方式解決) –
我認爲最好的選擇是檢查像素顏色是否在同一範圍內 - 使用inrange函數(注意它需要HSV圖像)。在這種情況下,球的中心可能只是一個光反射點(或者非常接近此點的某個位置),通常是球的最亮點。
您也可以嘗試拋出表格(閾值或範圍),然後分析所有剩下的內容。
我不認爲這樣做球的顏色不止一種如果球沒有超過一種顏色,光線反射是一種解決方案 我已經測試過最後的解決方案,但有些球像桌子一樣是綠色的。 –
我用Hough circle變換得到了一些好的結果(在玩了一段時間的參數之後)。我猜訣竅是使用足夠小的參數2(以允許更多檢測)和限制搜索半徑(以過濾出誤報)的組合。
circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,5,
param1=100,param2=10,minRadius=6,maxRadius=10)
此外我刪除了陰影,但我不確定是否需要在您的情況。 以下是一些測試結果。
的圖像不顯示斯諾克設置。斯諾克球通常具有純色。你是否要求另外設置泳池檯球? – IInspectable