Python | OpenCV 即時圖片中的物件追蹤
📚 前言
在前一篇我們學會了 視訊檔案處理與剪輯。
這一篇要介紹如何使用 OpenCV 即時圖片中的物件追蹤。
物件追蹤是電腦視覺的重要應用之一,常用於監控、運動分析、互動系統等場景。
除了攝影機,我們也可以用影片檔來模擬,方便測試追蹤效果。
🎨 範例影片
這裡我們使用 Pexels 提供的免費影片素材:Tennis Video。
下載後將檔名改為 tennis.mp4,在程式碼範例中使用。這段影片中有明顯的移動物件,非常適合用來測試追蹤演算法。
🔎 原理說明
- 物件追蹤 (Object Tracking):在影片或即時圖片中,持續追蹤某個選定的目標。
- 流程:
- 讀取來源 (攝影機 / 影片檔 / 網路串流)。
- 選定要追蹤的物件區域 (ROI)。
- 建立追蹤器 (Tracker)。
- 在迴圈中更新追蹤結果,並顯示。
🧠 八種追蹤演算法比較
OpenCV 提供了八種追蹤器,各有速度與精準度上的差異:
| 演算法 | 速度 | 精準度 | 說明 |
|---|---|---|---|
| BOOSTING | 慢 | 差 | 最早期的追蹤器,速度慢且不精準 |
| MIL | 慢 | 差 | 比 BOOSTING 稍好,但仍不精準 |
| GOTURN | 中 | 中 | 需搭配深度學習模型才能運作 |
| TLD | 中 | 中 | 速度與精準度一般 |
| MEDIANFLOW | 中 | 中 | 對快速移動或跳動物件不準確 |
| KCF | 快 | 高 | 常用追蹤器,速度快但遮擋時不準 |
| MOSSE | 最快 | 高 | 速度最快,精準度略低於 KCF/CSRT |
| CSRT | 快 | 最高 | 精準度最佳,但速度比 KCF 慢 |
建立追蹤器的語法 (新版 OpenCV 需使用 cv2.legacy):
1 | tracker = cv2.legacy.TrackerKCF_create() # KCF |
⚠️ 常見問題與解決方式
在新版 OpenCV (4.x) 中,如果直接使用 cv2.TrackerKCF_create() 會出現以下錯誤:
1 | AttributeError: module 'cv2' has no attribute 'TrackerKCF_create' |
解決方式:
- 安裝 opencv-contrib-python 套件,因為追蹤器屬於 contrib 模組:
1
pip install opencv-contrib-python
- 使用新版 API:
1
tracker = cv2.legacy.TrackerKCF_create()
這樣就能正常執行物件追蹤範例。
💻 範例程式 — 即時攝影機物件追蹤
1 | import cv2 |
![]()
圖:即時追蹤選定的物件
註:由於本身沒有攝影鏡頭,所以無法示範效果。
💻 範例程式 — 使用影片檔進行物件追蹤
1 | import cv2 |
![]()
圖:在影片檔中追蹤選定的物件
⚠️ 注意事項
- 追蹤器需要先選定 ROI,建議在第一幀選擇。
- 不同演算法有不同特性,需依場景選擇。
- 若物件消失或被遮擋,追蹤器可能失敗。
- 測試時可使用交通影片或運動影片,物件移動明顯,追蹤效果更佳。
📊 應用場景
- 監控系統:追蹤特定人物或車輛。
- 運動分析:追蹤球員或球的移動。
- 互動應用:即時追蹤手勢或物件。
- 自動化系統:追蹤工業流程中的物件。
🎯 結語
本篇我們學會了如何使用 OpenCV 即時圖片中的物件追蹤,並透過不同演算法持續追蹤選定的目標。
同時也解決了新版 OpenCV 中常見的錯誤,確保程式能在最新環境下正常執行。
除了攝影機,也能用影片檔來測試,方便在沒有攝影機的環境下練習。
這些技術在監控、運動分析與互動應用中非常常見,後續可以結合人臉偵測或特徵匹配,打造更完整的系統。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials
Pexels — 免費影片素材
