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