DigiHouse
日本語

TECH ARTICLE · NCU · 3 MIN READ

Blog / NCU

第 25 課|使用 OpenCV 進行目標追蹤

使用 OpenCV 進行目標追蹤。本文已重新整理為適合 DigiHouse 閱讀的課程文章,並保留原始 PIXNET 刊載網址。

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

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

程式碼範例與註解

text
# 匯入 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 是一種準確性較高的算法,非常適合需要精確追蹤的場景。

劉老師的跨域創想工坊

本文亦刊載於 PIXNET

https://liusming.pixnet.net/blog/posts/14222886486

第 21 課|使用 OpenCV 進行目標追蹤 | DigiHouse