OpenCV 3.2 Tracking 物體跟蹤
跟蹤就是在連續視訊幀中定位物體,通常的跟蹤演算法包括以下幾類:
1. Dense OpticalFlow 稠密光流
2. Sparse OpticalFlow 稀疏光流 最典型的如KLT演算法(Kanade-Lucas-Tomshi)
3. Kalman Filter
4. Meanshift andCamshift
5. Multiple objecttracking
需要注意跟蹤和識別的區別,通常來說跟蹤可以比識別快很多,且跟蹤失敗了可以找回來。
OpenCV 3以後實現了很多追蹤演算法,都實現在contrib模組中,安裝參考。
下面code實現了跟蹤筆記本攝像頭畫面中的固定區域物體,可以選用OpenCV實現的演算法
#include<opencv2/opencv.hpp>
#include<opencv2/tracking.hpp>
usingnamespace std;
usingnamespace cv;
int main(int argc,char** argv){
// can change to BOOSTING, MIL, KCF (OpenCV 3.1), TLD, MEDIANFLOW, orGOTURN (OpenCV 3.2)
Ptr<Tracker> tracker = Tracker::create("MEDIANFLOW");
VideoCapture video(0);
if(!video.isOpened()){
cerr << "cannot read video!" << endl;
return -1;
}
Mat frame;
video.read(frame);
Rect2d box(270,120, 180, 260);
tracker->init(frame, box);
while(video.read(frame)){
tracker->update(frame, box);
rectangle(frame, box, Scalar(255,0, 0), 2, 1);
imshow("Tracking", frame);
int k=waitKey(1);
if(k==27) break;
}
}
這裡介紹一下使用OpenCV進行目標跟蹤的方法,之前用過一點。opencv中目標跟蹤的一些比較新的方法(比如MIL、KCF、TLD等)都在opencv_contrib庫裡,所以首先你需要安裝它,詳見Opencv3.1.0+opencv_contrib配置及使用SIFT測試 。
關於tracking這一塊可參考Opencv的官網 Tracking API 、Introduction
to OpenCV Tracker 。
如果只是想要測試下非常簡單,官網都給了例程;要深入瞭解其原理,檢視相關論文即可。關於其效果的話,看你的使用場合和怎麼理解了。
這裡貼一下我根據例程稍作修改的測試程式。
原始碼:
#include <opencv2/core/utility.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <cstring>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
// show help
/*
if (argc<2) {
cout <<
" Usage: tracker <video_name>\n"
" examples:\n"
" example_tracking_kcf Bolt/img/%04d.jpg\n"
" example_tracking_kcf faceocc2.webm\n"
<< endl;
return 0;
}
*/
// declares all required variables
Rect2d roi;
Mat frame;
// create a tracker object
Ptr<Tracker> tracker = Tracker::create("KCF");
// set input video
// std::string video = argv[1];
VideoCapture cap("dount.avi");
// get bounding box
cap >> frame;
roi = selectROI("tracker", frame);
//quit if ROI was not selected
if (roi.width == 0 || roi.height == 0)
return 0;
// initialize the tracker
tracker->init(frame, roi);
// perform the tracking process
printf("Start the tracking process, press ESC to quit.\n");
for (;; ) {
// get frame from the video
cap >> frame;
// stop the program if no more images
if (frame.rows == 0 || frame.cols == 0)
break;
// update the tracking result
tracker->update(frame, roi);
// draw the tracked object
rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);
// show image with the tracked object
imshow("tracker", frame);
//quit on ESC button
if (waitKey(1) == 27)break;
}
return 0;
}
相關文章
- Block Change Tracking (Oracle 塊修改跟蹤)BloCOracle
- Oracle 塊修改跟蹤 (Block Change Tracking) 說明OracleBloC
- opencv的目標跟蹤演算法OpenCV演算法
- 10g中的塊修改跟蹤特性(Block Change Tracking)BloC
- package-tracking-app: Golang+RabbitMQ實時包裹跟蹤應用PackageAPPGolangMQ
- 使用OpenCV進行ROS 2的循線跟蹤OpenCVROS
- 用 Python 和 OpenCV 檢測和跟蹤運動物件PythonOpenCV物件
- 樹莓派利用OpenCV的影像跟蹤、人臉識別等樹莓派OpenCV
- 重識別(re-ID)特徵適合直接用於跟蹤(tracking)問題麼?特徵
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- openCV檢測物體是否運動OpenCV
- 物聯網對位置跟蹤和個人安全的好處
- 中介軟體---分散式跟蹤---Pinpoint分散式
- Python+OpenCV目標跟蹤實現基本的運動檢測PythonOpenCV
- opencv3.2 安裝說明書OpenCV
- Google利用智慧手機位置跟蹤使用者是否購物Go
- sqlnet跟蹤SQL
- ORACLE 跟蹤工具Oracle
- JVM中的本機記憶體跟蹤JVM記憶體
- db2mtrk記憶體跟蹤命令DB2記憶體
- 基於行跟蹤的ROWDEPENDENCIES實現資訊變化跟蹤
- 【Longkin】ASP.NET應用程式跟蹤---(一)跟蹤頁面ASP.NET
- CVPR2016跟蹤演算法Staple的配置(Staple: Complementary Learners for Real-Time Tracking)演算法
- Timemator自動化時間跟蹤軟體
- Entity Framework Code First實體物件變動跟蹤Framework物件
- 防止SQL SERVER的事件探查器跟蹤軟體SQLServer事件
- 反跟蹤技術
- 【TRACE】Oracle跟蹤事件Oracle事件
- Oracle跟蹤會話Oracle會話
- Oracle 跟蹤事件【轉】Oracle事件
- Oracle跟蹤檔案Oracle
- 主力跟蹤戰法
- sp_trace_setfilter sqlserver篩選跟蹤或跟蹤過濾FilterSQLServer
- git的跟蹤分支和遠端跟蹤分支學習筆記Git筆記
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- IoT Analytics釋出:全球蜂窩物聯網模組跟蹤報告