파이썬과 OpenCV를 사용하여 동영상에서 움직임 감지하기

소개

움직임 감지는 컴퓨터 비전 분야에서 중요한 주제 중 하나입니다. 이 기술은 보안 시스템, 동영상 모니터링, 자동차 추적 등 다양한 응용 분야에서 사용됩니다. 이번 블로그 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 움직임을 감지하는 방법에 대해 알아보겠습니다.

동영상에서 움직임 감지하기

  1. 필요한 라이브러리 설치하기 우선 파이썬에서 OpenCV 라이브러리를 사용하기 위해 다음 명령어를 터미널에서 실행하여 라이브러리를 설치합니다.
pip install opencv-python
  1. 동영상 읽어오기 ``` import cv2

동영상 파일 열기

video = cv2.VideoCapture(‘video.mp4’)

프레임 너비와 높이 얻기

frame_width = int(video.get(3)) frame_height = int(video.get(4))


3. 프레임마다 움직임 감지하기

import cv2

동영상 파일 열기

video = cv2.VideoCapture(‘video.mp4’)

프레임 너비와 높이 얻기

frame_width = int(video.get(3)) frame_height = int(video.get(4))

이전 프레임 초기화

previous_frame = None

while True: # 현재 프레임 읽기 ret, frame = video.read()

# 동영상이 끝나면 종료
if not ret:
    break

# 그레이스케일로 변환
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# 첫 번째 프레임인 경우, 이전 프레임 저장
if previous_frame is None:
    previous_frame = gray
    continue

# 현재 프레임과 이전 프레임의 차이 계산
frame_diff = cv2.absdiff(previous_frame, gray)

# 이진화
_, threshold = cv2.threshold(frame_diff, 30, 255, cv2.THRESH_BINARY)

# 움직임이 있는 영역 확인
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 움직임이 있는 영역 표시
for contour in contours:
    if cv2.contourArea(contour) > 500:  # 영역의 크기가 일정 크기보다 클 경우에만 표시
        x, y, w, h = cv2.boundingRect(contour)
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 결과 프레임 출력
cv2.imshow("Motion Detection", frame)

# 키 입력 대기
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

종료

video.release() cv2.destroyAllWindows() ```

결론

이렇게 파이썬과 OpenCV를 사용하여 동영상에서 움직임을 감지할 수 있습니다. 움직임 감지는 보안 시스템, 동영상 분석 등 다양한 분야에서 유용하게 활용될 수 있습니다. 파이썬과 OpenCV의 강력한 기능을 활용하면 간단하게 움직임 감지 애플리케이션을 개발할 수 있습니다.

참고 자료