追蹤演算法KCF體驗
本文使用KCF的opencv版本實現。
對應論文:High-Speed Tracking with Kernelized Correlation Filters
編譯環境:VS2015 + win7 64位
相關軟體下載安裝
需要下載opencv3.10,opencv_contrib和cmake-gui。
圖:opencv下載說明
圖:opencv_contrib下載說明
圖:cmake下載說明
cmake下載的是免安裝版本,解壓縮之後開啟cmake-gui就能直接執行。
將下載的3個檔案安裝/解壓縮。
一.編譯
開啟bin目錄下的cmake-gui.exe。
編譯分為在x86和x64下2中編譯方式,預設是使用x86編譯。
1. source code路徑選擇opencv3.1下的sources資料夾,build路徑可以自己新建一個資料夾進行存放,如下圖:
2. 開啟Tool---Configure,如果想生成x86下的庫,則選擇Visual Studio 14 2015;如果想生成x64下的庫,則選擇Visual Studio 14 2015 Win64。然後點選Finish。如下圖:
等待一段時間,軟體會自動配置。
3. 配置完成後,找到OPENCV_EXTRA_MODULES_PATH,將opencv_contrib的目錄放進去。如下圖,我的opencv_contrib路徑為D:/opencv/opencv_contrib-master/modules
4. 點選Generate,等待配置完成。
Visual Studio 2015編譯
1. 找到之前新建的newBuild目錄,開啟新生成的OpenCV.sln。
2. 在解決方案資源管理器中,選中“解決方案‘OpenCV’”,右鍵-->重新生成解決方案。
3. 依舊是資源管理器中,找到CMakeTargets中的INSTALL,右鍵-->僅用於專案-->僅生成INSTALL。注:想要Debug版(格式為opencv_xxxx310d.lib)的和Release版(格式為opencv_xxxx310.lib)的lib的話,分別選擇Debug和Release以後,生成兩遍就可以了。完成後,D:/OpenCV3.1/sources/newBulid/install下會有很多東西。
配置VS2015
1. 新建win32控制檯專案。
2. 新建cpp原始檔。
3. 配置包含目錄
我的是D:\opencv\opencv310\sources\newBulid\install\include
D:\opencv\opencv310\sources\newBulid\install\include\opencv
D:\opencv\opencv310\sources\newBulid\install\include\opencv2
如下圖:
4. 配置庫目錄
我的是D:\opencv\opencv310\sources\newBulid\install\x86\vc14\lib
D:\opencv\opencv310\sources\newBulid\install\x86\vc14\staticlib
如下圖:
5. 配置依賴項。
由於生成的依賴項太多,要是把每個lib一個一個寫上去,很麻煩,有一種簡便的方法,即,路徑+*.lib,比如我的即為:
D:\opencv\opencv310\sources\newBulid\install\x86\vc14\lib\*.lib
D:\opencv\opencv310\sources\newBulid\install\x86\vc14\staticlib\*.lib
如下圖
6. 以上是win32(x86)Debug配置方法,其他模式(x64、Release)配置方法類似。
測試KCF跟蹤演算法
在上面的工程中新增cpp原始檔,並輸入如下程式碼:
#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() {
// declares all required variables
//! [vars]
Rect2d roi;
Mat frame;
//! [vars]
// create a tracker object
Ptr<Tracker> tracker = Tracker::create("KCF");
//! [create]
// set input video
//! [setvideo]
std::string video = "E:\\demo1.avi";
VideoCapture cap(video);
//! [setvideo]
// get bounding box
//! [getframe]
cap >> frame;
//! [getframe]
//! [selectroi]選擇目標roi以GUI的形式
roi = selectROI("tracker", frame);
//! [selectroi]
//quit if ROI was not selected
if (roi.width == 0 || roi.height == 0)
return 0;
// initialize the tracker
//! [init]
tracker->init(frame, roi);
//! [init]
// perform the tracking process
printf("Start the tracking process\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
//! [update]
tracker->update(frame, roi);
//! [update]
//! [visualization]
// draw the tracked object
rectangle(frame, roi, Scalar(255, 0, 0), 2, 1);
// show image with the tracked object
imshow("tracker", frame);
//! [visualization]
//quit on ESC button
if (waitKey(1) == 27)
break;
}
return 0;
}
注意:修改std::string video ="E:\\demo1.avi";這條語句中的視訊路徑即可。
執行之後,首先框出物體,然後按下空格或者回車,系統便開始跟蹤
最後效果如下圖:
注:編譯opencv比較麻煩,建議使用這個版本的KCF:https://github.com/hjl240/KCF-Tracking
相關文章
- 目標跟蹤演算法----KCF進階(基於KCF改進的演算法總結)演算法
- SQL追蹤和事件追蹤SQL事件
- KCF目標跟蹤方法分析與總結
- 八領域邊界追蹤演算法演算法
- golang 程式記憶體追蹤、分析Golang記憶體
- 眼球追蹤讓VR體驗更逼真自然 玩遊戲超酷還不暈VR遊戲
- 目標跟蹤:KCF執行流程圖(matlab版本)流程圖Matlab
- 目標跟蹤:KCF--調通C++程式碼C++
- 日誌追蹤
- 程式碼追蹤
- OpenTelemetry分散式追蹤分散式
- XCOrganizer for Mac - 專案標籤分配追蹤軟體Mac
- Klokki for mac(自動時間追蹤管理軟體)Mac
- 微服務追蹤SQL(支援Isto管控下的gorm查詢追蹤)微服務SQLGoORM
- 如何追蹤laravel動態Laravel
- 如何追蹤Java動態Java
- 如何追蹤vue動態Vue
- 如何追蹤Go動態Go
- 追蹤解析 Disruptor 原始碼原始碼
- Debug追蹤eclipseEclipse
- 路由追蹤命令詳解路由
- oracle追蹤誤操作DDLOracle
- go的鏈路追蹤Go
- VR體驗中的追蹤定位,現在可以換成低成本的Wi-Fi了VR
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- 軟體異常追蹤利器Bugsnag使用詳解
- FTC 首次關閉銷售“追蹤者軟體”的公司
- 搭建資料追蹤系統
- 使用 CSS 追蹤使用者CSS
- 如何追蹤Python動態Python
- 如何追蹤laravel動態<二>Laravel
- 追蹤解析 ThreadPoolExecutor 原始碼thread原始碼
- Tockler for Mac時間追蹤工具Mac
- Spring Cloud 鏈路追蹤SpringCloud
- 網路安全追蹤利器IpTicker
- DataGuard環境程式資訊追蹤
- 使用dbms_system 追蹤sqlSQL
- skywalking鏈路追蹤