Python OpenCV를 사용하여 동영상에서 움직이는 물체 검출 예제

 본 포스트에서는 background subtraction을 사용하여 동영상에서 움직이는 물체를 검출하는 예제를 싣고 있다.


배경 제거 (background subtraction)의 원리는 아래 포스트를 참조하자.

신호에서 배경 제거(background subtraction)를 통한 움직이는 물체의 위치 검출


OpenCV에는 Background Subtractor가 구현되어 있으므로 이를 사용하였다.

https://docs.opencv.org/3.4/de/de1/group__video__motion.html


코드는 아래와 같다.

import cv2 as cv
import numpy as np


def main():
    
    cap = cv.VideoCapture('20201110_113359.mp4')
    
    bgs = cv.createBackgroundSubtractorKNN(dist2Threshold =500,detectShadows=False)
    
    while cap.isOpened():
        ret, frame = cap.read()
        
        if not ret:
            break
        
        frame = cv.resize(frame,None,fx=0.2,fy=0.2,interpolation = cv.INTER_CUBIC)
        fgmask = bgs.apply(frame)
    
        cv.imshow('video', frame)
        cv.imshow('moving', fgmask)
        
        if cv.waitKey(1) == ord('q'):
            break
        
    cap.release()
    cv.destroyAllWindows()

if __name__ == "__main__":
    main()



cv.createBackgroundSubtractorKNN를 사용하여 Background Subtractor를 생성하고, fgmask = cv.createBackgroundSubtractorKNN.apply(frame)을 사용하여 영상의 프레임에서 움직임 데이터를 받아온다. 

아래 이미지의 video 창은 동영상의 frame 이미지이며, moving창은 영상에서 움직이는 물체를 표시한다. 

 


fgmask 화면 크기의 uint8 타입의 데이터다.

 



관련 글

Python opencv 설치와 이미지 출력 및 카메라 영상 캡쳐 예제 코드


댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

base64 인코딩 디코딩 예제 c 소스

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제