OpenCV目標追蹤滑鼠選擇ROI區域
阿新 • • 發佈:2018-11-04
學習一下OpenCV中利用滑鼠勾選ROI區域進行目標追蹤,過程直接註釋到程式碼中了。
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/video.hpp>
#include <opencv2/core/utility.hpp>
#include <cstring>
using namespace std;
using namespace cv;
int main(int argc,char** argv) {
Mat frame; //定義Mat型別用來儲存視訊流中的幀
Ptr<TrackerKCF> tracker = TrackerKCF::create(); //建立一個跟蹤器,跟蹤器為KCF型別
VideoCapture video(0); //例項化一個物件video,控制攝像頭視訊的流入,輸入引數0用來開啟相機
if(!video.isOpened()) //如果視訊沒有開啟
{
cerr<<"cannot read video!"<<endl; //輸出錯誤
return -1;
}
Rect2d trackWindow; //定義一個矩形視窗trackWindow
video.read(frame); //從video中讀取影象存入到frame中
trackWindow = selectROI("TRACK",frame); //用滑鼠框選感興趣的區域
if(trackWindow.width == 0 || trackWindow.height == 0) //勾選區域如果為空,則返回0
{
return 0;
}
tracker->init(frame,trackWindow); //初始化跟蹤器,用視訊的第一幀,和框選的矩形區域
cout<<"開始進行跟蹤!";
while(video.read(frame)) //迴圈,不斷讀取視訊的幀
{
tracker->update(frame,trackWindow); //跟新跟蹤器,用新的一幀和框選的區域
rectangle(frame,trackWindow,Scalar(255,0,0),2,1); //在後續幀中自動繪製矩形,矩形在新的一幀,大小為trackWindow,顏色為藍色,線寬,線型
imshow("TRACK",frame); //展示frame幀在TRACK視窗
int k = waitKey(1);
if(k == 27)
{
break;
}
}
// 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;
// }
// }
}