只是一個說明,這還沒有經過測試。
一旦你提取球的位置,你可以得到它的輪廓。我的建議只適用於具有較淺補丁和較暗補丁(五邊形)的足球。
確定良好的二進制閾值以獲取白色和黑色補丁。做一些像腐蝕或擴張的圖像處理,以消除針縫產生的縫隙之間的裂縫。在球周圍繪製白色圓圈以確保沒有任何黑色斑點被認爲是「球洞」,並且您準備好抓住球內的輪廓。主輪廓是由白色斑點製成的白色輪廓,並且所有黑色輪廓都是黑色斑點。
弱點:髒球可以有二進制閾值問題,也許使用自適應閾值?
1.使用查表/數學公式(?)的黑色斑塊大小和距離
黑色塊的大小取決於距離球的中心。使用黑色補丁上的學習數據給算法提供距離中心的距離及其大小(兩個值都相對於球的大小)。
例如:
Ball in recorded frame has bounding box of 200x200 px and area of 30000px
Found 6 black patches inside:
patch 1 is in the middle (distance 0px from center) and has area of 600px
patch 2 is on the side (distance 50px from center) and has area of 150px
patch 3... patch 4... and so on
所以,你給你的查找表數據:
distance = 0% -> area = 2%
distance = 25% -> area = 0.5%
distance = ... -> area = ...
and so on
現在,當您檢查您是否檢測到的東西是一個球,檢查他們的黑色斑塊大小。如果它們的大部分尺寸和距離球的中心的距離在可接受的範圍內,則檢測到的對象是球。
2.檢查輪廓形狀
可以檢查使用cvApproxPoly
每個輪廓。如果大多數黑色輪廓都是五邊形 - 這是一個球。