close

使用 OpenCV 進行目標追蹤的完整程式解析

本文介紹如何使用 OpenCV 的 CSRT 追蹤器在影片中進行目標追蹤。以下程式會讀取影片檔案,允許用戶選擇感興趣的區域(ROI),並透過追蹤器持續更新與顯示追蹤結果。

程式碼範例與註解

# 匯入 OpenCV 模組
import cv2

# 打開影片檔案
cap = cv2.VideoCapture('vtest.avi')

# 初始化 CSRT 追蹤器
tracker = cv2.TrackerCSRT_create()

# 初始化感興趣區域 (ROI)
roi = None

# 讀取影片幀
while True:
    ret, frame = cap.read()

    # 如果 ROI 尚未設定,讓用戶選擇
    if roi is None:
        roi = cv2.selectROI('frame', frame)  # 用戶選擇感興趣區域
        if roi != (0, 0, 0, 0):  # 如果 ROI 合法,初始化追蹤器
            tracker.init(frame, roi)

    # 更新追蹤器
    success, rect = tracker.update(frame)
    if success: 
        # 如果追蹤成功,繪製矩形框
        (x, y, w, h) = [int(i) for i in rect]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    # 顯示更新後的幀
    cv2.imshow('frame', frame)

    # 按 ESC 鍵退出
    if cv2.waitKey(66) == 27:
        cv2.destroyAllWindows()
        break

  

程式解析

  • 影片讀取: 使用 cv2.VideoCapture 加載影片檔案 'vtest.avi'
  • 初始化追蹤器: 使用 cv2.TrackerCSRT_create() 創建 CSRT 追蹤器,適合處理慢速運動或遮擋場景。
  • 選擇感興趣區域 (ROI): cv2.selectROI 允許用戶手動選擇畫面中的目標區域,並將選擇結果作為追蹤器的初始化參數。
  • 更新追蹤器: 使用 tracker.update 更新目標位置,若追蹤成功,返回目標的矩形框座標。
  • 繪製矩形框: 使用 cv2.rectangle 在幀中繪製綠色矩形框來表示目標的最新位置。
  • 顯示幀: 使用 cv2.imshow 顯示處理後的幀,並設置按鍵事件以退出程序。

結論

此程式展示了如何使用 OpenCV 的 CSRT 追蹤器在影片中進行目標追蹤。用戶可以嘗試不同的追蹤算法(如 KCF 或 MOSSE)來適應不同場景。CSRT 是一種準確性較高的算法,非常適合需要精確追蹤的場景。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 liusming 的頭像
    liusming

    劉老師的跨域創想工坊

    liusming 發表在 痞客邦 留言(0) 人氣()