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 설치와 이미지 출력 및 카메라 영상 캡쳐 예제 코드
댓글
댓글 쓰기