2014-03-03 52 views
1

我一直在使用python的opencv兩個星期。我想找到移動物體的中心。如何找到正在移動的二進制圖像中的點的中心

我首先找到兩個幀和按位的區別。如圖所示,按位移後,它就像移動物體(四轉子)周圍的一組白點一樣出現。

所以我的問題是:在這種情況下,我應該用什麼方法找到運動物體(四轉子)的中心?

我想也許只是找到所有這些點的平均中心,但我不知道該怎麼做。

這裏是樣品圖片

ss

ss2



這裏是我的代碼

import cv2 

def diffImg(t0, t1, t2): 
    d1 = cv2.absdiff(t2, t1) 
    d2 = cv2.absdiff(t1, t0) 
return cv2.bitwise_and(d1, d2) 

cam = cv2.VideoCapture('track_outdoor.avi') 

winName = "Movement Indicator" 
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE) 

# Read three images first: 
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 


while True: 
    diff_frame= diffImg(t_minus, t, t_plus) 

    cv2.imshow('Original', t_plus) 
    cv2.imshow(winName, diff_frame) 
    # Read next image 
    t_minus = t 
    t = t_plus 
    t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 

    key = cv2.waitKey(10) 
    if key == 27: 
     cv2.destroyWindow(winName) 
     break 

更新#1

首先感謝托鉢僧的回答

我只是試圖應用方法來找到大衆中心 它的工作,但作爲苦行僧它不準確,因爲我需要。

所以我想出了另一個想法,如果我交流diff_frame的亮度是 更容易,更精確地使用像輪廓或其他方法?

+0

您是否試圖在diff圖像中找到這些點的不規則外輪廓? – dervish

回答

0

您可以申請幾個方法,

  • 獲得平均協調所有點的x的,與同爲Y,但這種方式可能是因爲你需要不準確。
  • 爲我們需要定義包含這些點的常規的輪廓如下:三角形的

    • 三角形=>查找中心
    • 圓=>中心圓或甚至矩形的。
    • 對這種方式我請你看那些opencv functions
  • 如果你能找到你可以用時間來計算的質心不規則形狀: 把你分在一個變量,例如vector<Points> contour;然後執行下列操作:

矩媽媽=矩(墊(輪廓));
//找到質量中心
Point mc = Point(mom.m10/mom.m00,mom.m01/mom.m00);

相關問題