2016-07-09 14 views
1

フレーム差分(フォアグラウンド検出)は完全に機能します。今、私はそれにblob検出である特別な関数を追加したいと思います。基本的には、私の考えは、検出されたオブジェクトの動きにブロブ円を描くことです。ブロブ検出+フォアグラウンド検出

これは私のコードです:

import cv2 

cap = cv2.VideoCapture('14.mp4') 
ret, current_frame = cap.read() 
previous_frame = current_frame 

# Setup SimpleBlobDetector parameters. 
params = cv2.SimpleBlobDetector_Params() 

# Change blob detection thresholds 
params.minThreshold = 200 
params.maxThreshold = 255 

params.minDistBetweenBlobs = 100 

# Filter by Area. 
params.filterByArea = True 
params.minArea = 1200 
params.maxArea = 40000 

# Filter by Circularity 
params.filterByCircularity = False 
params.minCircularity = 0.1 

# Filter by Convexity 
params.filterByConvexity = False 
params.minConvexity = 0.87 

# Filter by Inertia 
params.filterByInertia = True 
params.minInertiaRatio = 0.02 

# Create a detector with the parameters 
detector = cv2.SimpleBlobDetector_create(params) 

#Detect blobs 
keypoints = detector.detect(current_frame) 

while(cap.isOpened()): 
    current_frame_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY) 
    previous_frame_gray = cv2.cvtColor(previous_frame, cv2.COLOR_BGR2GRAY)  

    frame_diff = cv2.absdiff(current_frame_gray,previous_frame_gray) 

    im_with_keypoints = cv2.drawKeypoints(frame_diff, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) 

    cv2.imshow('frame diff ',im_with_keypoints)   
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

    previous_frame = current_frame.copy() 
    ret, current_frame = cap.read() 
    keypoints = detector.detect(current_frame) 

cap.release() 
cv2.destroyAllWindows() 

私のエラーは、「画像をnumpyのarraryません、どちらもスカラー」

答えて

0

あなたは機能detector.detectにごcap変数を渡しているが、capがから来ていますcv2.VideoCapture Numpy配列ではなくCvCaptureオブジェクトを返します。

代わりにcurrent_frame.read()で返してください。

keypoints = detector.detect(current_frame) 
+0

はい。それを私が直した。しかし、なぜ赤い円が動く物体を追跡していないのか。ビデオの1つの点で静止しているだけです。 –

+0

@LeeAndroidループの最後にも 'keypoints = detector.detect(current_frame)'を追加しようとしましたので、新しいビデオフレームごとにブロブ検出をリフレッシュできますか? – Delgan

+0

はい、私はしました。私はまだバグを見つけることができません。ループの最後にコードを追加しました。まだ同じ。 –

0

あなたは

をライブラリ "numpyのを" インポートする必要がありますが(入力、+ R、CMDに勝つ)あなたのCMDに、それをistallすることができます:numpyの

をインストールして、あなたのコードで書くPIP:インポートnumpy as np

関連する問題