2017-05-31 10 views
0

別のビデオでバックグラウンド減算を行って得たビデオがあります。今私はこのビデオのブロブ検出を実行し、赤い枠線でブロブをマークする必要があります。次のように私のコードは次のとおりバックグラウンド減算ビデオでブロブ検出を実行できませんopencv python

capture = cv2.VideoCapture('bw.avi') 
size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), 
int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))) 
fourcc = cv2.VideoWriter_fourcc(*'DIVX') 
video = cv2.VideoWriter('harsha_blob.avi', fourcc, 10.0,size) 

while (1): 
    ret, im = capture.read() 
    im = cv2.convertScaleAbs(im) 

    params = cv2.SimpleBlobDetector_Params() 
    params.blobColor = 0 
    params.filterByColor = True 
    params.minArea = 0 
    params.filterByArea = False 
    params.minThreshold = 120; 
    params.maxThreshold = 255; 
    detector = cv2.SimpleBlobDetector_create(params) 

    keypoints = detector.detect(im) 

    # Draw detected blobs as red circles. 
    # cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob 
    im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) 


    if ret==True: 

     video.write(im_with_keypoints) 


    else: 
     capture.release() 
     video.release() 
     break 

    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

cv2.destroyAllWindows() 

背景ビデオがブロブ検出は、黒/グレーブロブを見つけたようにブロブが黒と白の背景にするために反転した減算しました。私は単一のフレームでブロブを検出することができますが、私はビデオ上でそれを実行しようとすると、次のエラーが発生しています。

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

error: C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\features2d\src\draw.cpp:115: error: (-215) !outImage.empty() in function cv::drawKeypoints 

エラーが発生するのはなぜですか?そして私はこれをどのように修正するのですか?

答えて

1

!outImage.empty()は、フレームがなくなり、ret, im = capture.read()ret==Falseを返したときにビデオの最後に表示されます。ブロブのキーポイントを見つける前に、その状態をチェックする必要があります。

while (1): 
    ret, im = capture.read() 
    if not ret: 
     break 

    # blob detection code 
関連する問題