武汉加油,中国加油
在家无聊,一开始准备用模板匹配写一个目标追踪,今天逛论坛,发现Opencv自带追踪大法,赶紧运行了一番,发现效果还行,速度快的不要不要的。
但是缺陷也是非常的明显,准确度不敢恭维,非常容易丢目标,误差不断累积,以至于最后越来越不准确,还有就是目标消失后,矩形框会一直存在。
话不多说,直接上代码,注释很详细,不多解释。
其实单目标追踪跟多目标追踪的方法是一样的具体如下,自由发挥。
单目标追踪
#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(){
Rect2d roi;
Mat frame;
//实例化跟踪器
Ptr<TrackerKCF> tracker = TrackerKCF::create();
//载入视频
string video = "C:\\Users\\14587\\Desktop\\test1.mp4";
VideoCapture cap(video);
//载入摄像头
//VideoCapture cap(0);
if (!cap.isOpened())
{
printf("can not load video");
return 0;
}
cout << "按s进入目标选择" << endl;
cout << "按空格键进入目标追踪" << endl;
cout << "按q退出" << endl;
cap >> frame;
while (1)
{
char key = waitKey(15);
// 按d跳下一帧
cap >> frame;
resize(frame, frame, Size(600, 400)