반응형

OpenCV에서 제공하는 Tracker를 사용한 Tracking 예제입니다.

 

2024. 5. 23  최초작성


https://youtu.be/rswSdXN1KUw

 

import cv2
import time


# 카메라 장치 열기. 윈도우/리눅스에선 0을 사용하고 맥북에선 1을 사용합니다.
cap = cv2.VideoCapture(1

# 웹캠 초기화 시간을 고려하여 딜레이를 줍니다.
time.sleep(1)

# 트래커 객체를 생성합니다.
tracker = cv2.TrackerKCF_create()

# 첫 프레임 읽어옵니다.
ret, frame = cap.read()
if not ret:
    print("프레임을 읽을 수 없습니다.")
    cap.release()
    cv2.destroyAllWindows()
    exit(1)

# ROI를 선택합니다. 사각형 그릴 시작위치에서 마우스로 클릭 후 드래그하여 사각형을 완성 후, ESC 키를 누르면 됩니다.
roi = cv2.selectROI("tracker", frame, fromCenter=False, showCrosshair=True)

print(roi)

# ROI가 선택되지 않은 경우입니다.
if roi[2] == 0 or roi[3] == 0:
    print('ROI가 선택되지 않았습니다.')
    cap.release()
    cv2.destroyAllWindows()
    exit(0)

# 트래커를 지정한 ROI로 초기화합니다.
tracker.init(frame, roi)

# 트래킹 프로세스를 시작합니다.
print("Start the tracking process, press ESC to quit.\n")


while True:
    # 비디오로부터 프레임을 가져옵니다.
    ret, frame = cap.read()
    if not ret:
        break
   
    # 트래킹 결과를 업데이트하여 변경된 ROI를 반환받습니다.
    success, roi = tracker.update(frame)

    if success:
        # 트래킹된 객체의 위치에 사각형을 그려좁니다.
        p1 = (int(roi[0]), int(roi[1]))
        p2 = (int(roi[0] + roi[2]), int(roi[1] + roi[3]))
        cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)
    else:
        # 트래킹 실패시 메시지 출력합니다.
        cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)
   
    # 영상을 화면에 보여줍니다.
    cv2.imshow("tracker", frame)

    # ESC 키를 누르면 종료헙니다.
    if cv2.waitKey(1) == 27:
        break

# 자원을 해제합니다.
cap.release()
cv2.destroyAllWindows()




참고

 

https://docs.opencv.org/4.x/d2/d0a/tutorial_introduction_to_tracker.html 



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts