1. 程式人生 > >OpenCV目標追蹤滑鼠選擇ROI區域

OpenCV目標追蹤滑鼠選擇ROI區域

學習一下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; // } // } }