파이썬과 OpenCV를 사용하여 동영상에서 움직임 감지하기
소개
움직임 감지는 컴퓨터 비전 분야에서 중요한 주제 중 하나입니다. 이 기술은 보안 시스템, 동영상 모니터링, 자동차 추적 등 다양한 응용 분야에서 사용됩니다. 이번 블로그 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 움직임을 감지하는 방법에 대해 알아보겠습니다.
동영상에서 움직임 감지하기
- 필요한 라이브러리 설치하기 우선 파이썬에서 OpenCV 라이브러리를 사용하기 위해 다음 명령어를 터미널에서 실행하여 라이브러리를 설치합니다.
pip install opencv-python
- 동영상 읽어오기 ``` 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의 강력한 기능을 활용하면 간단하게 움직임 감지 애플리케이션을 개발할 수 있습니다.
참고 자료
- OpenCV 공식 문서- #OpenCV #움직임감지