opencv3扩展模块(opencv_contrib) 实现目标跟踪

opencv_contrib集成了八种工具包括:

BOOSTING Tracker:和Haar cascades(AdaBoost)背后所用的机器学习算法相同,但是距其诞生已有十多年了。这一追踪器速度较慢,并且表现不好,但是作为元老还是有必要提及的。(最低支持OpenCV 3.0.0)

MIL Tracker:比上一个追踪器更精确,但是失败率比较高。(最低支持OpenCV 3.0.0)

KCF Tracker:比BOOSTING和MIL都快,但是在有遮挡的情况下表现不佳。(最低支持OpenCV 3.1.0)

CSRT Tracker:比KCF稍精确,但速度不如后者。(最低支持OpenCV 3.4.2)

MedianFlow Tracker:在报错方面表现得很好,但是对于快速跳动或快速移动的物体,模型会失效。(最低支持OpenCV 3.0.0)

TLD Tracker:我不确定是不是OpenCV和TLD有什么不兼容的问题,但是TLD的误报非常多,所以不推荐。(最低支持OpenCV 3.0.0)

MOSSE Tracker:速度真心快,但是不如CSRT和KCF的准确率那么高,如果追求速度选它准没错。(最低支持OpenCV 3.4.1)

GOTURN Tracker:这是OpenCV中唯一一深度学习为基础的目标检测器。它需要额外的模型才能运行,本文不详细讲解。(最低支持OpenCV 3.2.0)

我个人的建议:

如果追求高准确度,又能忍受慢一些的速度,那么就用CSRT

如果对准确度的要求不苛刻,想追求速度,那么就选KCF

纯粹想节省时间就用MOSSE

本人的配置是opencv3.2,故而CSRT与MOSSE不做验证:

#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	VideoCapture capture;
	capture.open("D:/picture/opencv/images/04.mp4");
	if (!capture.isOpened()) {
		printf("could not load video data...\n");
		return -1;
	}

	Mat frame;
	namedWindow("tracker demo", CV_WINDOW_AUTOSIZE);
	//KCF失踪不好重新捕获,
	//BOOSTING这个分类器需要在运行时用对象的正和负例子训练,给定新帧,对先前位置的邻域中的每个像素运行分类器,并记录分类器的得分。 对象的新位置是得分最大的位置,现在用得很少了。 
	//MIL
	//TLD学习时间长速度非常慢
	//MEDIANFLOW跟踪roi的size越来越大直到失真
	Ptr<Tracker> tracker = Tracker::create("MEDIANFLOW");
	capture.read(frame);
	Rect2d  roi = selectROI("tracker demo", frame);
	if (roi.width == 0 || roi.height == 0) {
		return -1;
	}
	tracker->init(frame, roi);
	while (capture.read(frame)) {
		tracker->update(frame, roi);
		rectangle(frame, roi, Scalar(255, 0, 0), 2, 8, 0);
		imshow("tracker demo", frame);

		char c = waitKey(20);
		if (c == 27) {
			break;
		}
	}

	capture.release();
	waitKey(0);
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值