파이썬과 OpenCV를 사용한 동영상에서 움직이는 물체 추적하기

이 문서에서는 파이썬과 OpenCV를 사용하여 동영상에서 움직이는 물체를 추적하는 방법에 대해 알아보겠습니다.

목차

소개

물체 추적은 컴퓨터 비전 분야에서 중요한 주제 중 하나입니다. 이 기술은 동영상에서 움직이는 물체를 식별하고 추적하여 이동 패턴을 분석할 수 있습니다. 이를 통해 보안 시스템, 자율주행차, 감시 시스템 등 다양한 응용 분야에서 사용됩니다.

동영상 로드

먼저, 파이썬과 OpenCV를 이용하여 동영상을 로드하는 방법을 알아보겠습니다. 아래의 예제 코드를 참고하십시오.

import cv2

# 동영상 파일 로드
video = cv2.VideoCapture("영상 파일 경로")

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

    if not ret:
        break

    # 여기에 물체 추적 알고리즘을 적용합니다.

    # 영상 출력
    cv2.imshow("Video", frame)
    if cv2.waitKey(1) == ord('q'):
        break

# 종료
video.release()
cv2.destroyAllWindows()

프레임 차이 계산

다음으로, 움직이는 물체를 식별하기 위해 프레임 간의 차이를 계산해보겠습니다. 이를 통해 움직임이 있는 영역을 표시할 수 있습니다. 아래의 예제 코드를 참고하십시오.

# 이전 프레임과 현재 프레임 비교
diff = cv2.absdiff(prev_frame, current_frame)

# 차이값 이진화
threshold = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)[1]

# 영상 출력
cv2.imshow("Difference", threshold)

이진화

프레임 간의 차이를 계산하였으면, 이진화를 통해 움직임을 표시할 영역을 결정합니다. 이진화는 영상을 흑백으로 변환하는 작업입니다. 아래의 예제 코드를 참고하십시오.

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

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

윤곽선 검출

이진화된 영상에서 윤곽선을 검출하여 물체를 식별할 수 있습니다. 아래의 예제 코드를 참고하십시오.

# 윤곽선 검출
contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 윤곽선 그리기
cv2.drawContours(frame, contours, -1, (0, 255, 0), 2)

# 영상 출력
cv2.imshow("Contours", frame)

물체 추적

이제 윤곽선을 통해 물체를 추적할 수 있습니다. 움직이는 물체의 위치를 계산하고 이를 화면에 표시하는 작업을 추가할 수 있습니다. 아래의 예제 코드를 참고하십시오.

for contour in contours:
    # 윤곽선 바운딩 박스 추출
    (x, y, w, h) = cv2.boundingRect(contour)

    # 바운딩 박스 그리기
    cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 물체 위치 출력
    cv2.putText(frame, "Object", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

# 영상 출력
cv2.imshow("Tracking", frame)

결론

이러한 방법을 통해 파이썬과 OpenCV를 사용하여 동영상에서 움직이는 물체를 추적할 수 있습니다. 물체 추적은 다양한 응용 분야에서 활용되며, 보안 시스템, 자율주행차, 감시 시스템 등에서 중요한 역할을 합니다. 현재 프레임 구하고, 프레임 차이 계산, 이진화, 윤곽선 검출, 물체 추적의 단계를 순서대로 수행하여 움직이는 물체를 식별하고 추적할 수 있습니다.