5

我需要在網絡攝像機的視頻幀中進行穩健的運動檢測和跟蹤。背景總是一樣的。目的是識別物體的位置,如果可能的話沒有陰影,但不是那麼緊急以去除陰影。我已經嘗試過使用opencv算法進行背景減法和閾值處理,但是這僅取決於一個圖像作爲背景,如果背景在亮度(或相機自動對焦)中稍微改變了一點,我需要算法對於亮度或陰影幾乎沒有變化。Opencv跟蹤的運動檢測

回答

3

強大的跟蹤方法是世界各地正在開發的廣泛研究興趣的一部分... 這裏有可能是解決您的問題的關鍵,這是非常有趣但廣泛和開放的問題。

首先,它們中的很多都假定亮度恆定(因此你所要求的難以達到)。例如:

  • 盧卡斯 - 奏
  • 霍恩 - 雄克
  • 塊匹配

被廣泛地用於跟蹤,但假定亮度恆定。

然後其他有趣的東西可以均值漂移或CAMSHIFT跟蹤,但你需要一個投影跟着......但是你可以用一個背投影相應計算,以一定的閾值,以適合穩健您的需求...

我會稍後發佈, Julien,

3

當您嘗試在OpenCV中使用閾值(RGB)(紅色,綠色,藍色)或HSV(色調,飽和度,值)顏色格式?根據個人經驗,我發現HSV編碼在與OpenCV進行閾值處理時使用視頻素材中的彩色對象進行跟蹤,cvBlobsLib可用於識別blob位置。

單純皰疹病毒比較容易,因爲單純皰疹病毒的優點是隻需使用單一數字來檢測色彩(「色調」),儘管這種顏色具有多種色調的真實可能性,從光到更深的色調。 (顏色的數量和顏色的亮度分別由「飽和度」和「數值」參數處理)。

我閾值HSV參考圖像(「imgHSV」),以獲得使用呼叫到cvInRange()的OpenCV API二進制(黑色和白色)圖像:

cvInRangeS(imgHSV, 
      cvScalar(104, 178, 70 ), 
      cvScalar(130, 240, 124), 
      imgThresh); 

在上面的例子中,兩個cvScalar參數是HSV值的下限和上限,表示藍色的色相。在我自己的實驗中,我能夠通過抓取我感興趣追蹤的對象的截圖並觀察發生的色調/飽和度/亮度值的種類來獲得一些合適的最大/最小值。

有關代碼示例的更詳細的描述可以在此blog posting上找到。

1

安德里安有一個很酷的教程http://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

我也跟着有一個良好的實驗測試 https://youtu.be/HJBOOZVefXA

我使用靜態圖像以及

frameDelta = cv2.absdiff(firstFrame, gray) 
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] 
thresh = cv2.dilate(thresh, None, iterations=2) 
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, 
cv2.CHAIN_APPROX_SIMPLE) 

4行代碼中找到運動以及 好運