파이썬으로 OpenCV를 이용하여 동영상에서 물체 트래킹하기

이 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 물체를 추적하는 방법에 대해 알아보겠습니다. OpenCV는 컴퓨터 비전을 위한 강력한 라이브러리로, 이미지 및 비디오 프로세싱, 객체 검출 및 트래킹 등 다양한 작업을 수행할 수 있습니다.

동영상 불러오기

먼저 OpenCV를 설치하고 동영상을 불러와야 합니다. 다음 코드를 사용하여 동영상을 불러오고 화면에 보여줍니다.

import cv2

# 동영상 파일 열기
video = cv2.VideoCapture('video.mp4')

while True:
    # 현재 프레임 읽기
    ret, frame = video.read()
    
    # 동영상 끝까지 재생하면 종료
    if not ret:
        break
    
    # 프레임 화면에 표시하기
    cv2.imshow('Video', frame)
    
    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 종료 후에 창 닫기
cv2.destroyAllWindows()

이 코드는 “video.mp4” 파일을 읽고, 각 프레임을 화면에 표시합니다. ‘q’ 키를 눌러서 종료할 수 있습니다.

물체 추적하기

이제 물체를 추적하는 과정을 알아보겠습니다. 물체 추적을 위해 먼저 초기 위치를 선택해야 합니다. 이 위치는 추후에 업데이트될 것입니다.

import cv2

# 동영상 파일 열기
video = cv2.VideoCapture('video.mp4')

# 첫 번째 프레임 읽기
ret, frame = video.read()

# 초기 위치 선택
bbox = cv2.selectROI(frame, False)

# 트래커 초기화
tracker = cv2.TrackerCSRT_create()
tracker.init(frame, bbox)

while True:
    # 현재 프레임 읽기
    ret, frame = video.read()
    
    # 동영상 끝까지 재생하면 종료
    if not ret:
        break
    
    # 물체 추적
    success, bbox = tracker.update(frame)
    
    # 추적 결과 화면에 표시하기
    if success:
        # 추적 성공
        x, y, w, h = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    else:
        # 추적 실패
        cv2.putText(frame, "Tracking Failure", (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    
    # 프레임 화면에 표시하기
    cv2.imshow('Video', frame)
    
    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 종료 후에 창 닫기
cv2.destroyAllWindows()

위 코드는 선택한 물체의 위치를 추적하고, 업데이트 된 위치를 화면에 표시합니다. 만약 추적에 실패하면 “Tracking Failure”라는 메시지가 화면에 표시됩니다.

요약

이 포스트에서는 파이썬과 OpenCV를 사용하여 동영상에서 물체를 추적하는 방법에 대해 알아보았습니다. OpenCV의 다양한 기능을 활용하여 물체 추적 애플리케이션을 개발할 수 있습니다. 더 많은 정보와 사용 예제를 참고하려면 OpenCV 공식 문서를 참조하시기 바랍니다.

References: