C++实现 单目标跟踪+画出轨迹 - OpenCV函数调用测试

       环境:OpenCV 4.2.0 / OpenCV-contrib 4.2.0 / Visual studio 2017

       本以为OpenCV没有封装好的目标跟踪算法,然后前几天一直去找各种算法的源码,但是也不亏,算是装了一万遍OpenCV的环境了解了下不同版本OpenCV吧,┑( ̄Д  ̄)┍

       然后发现居然在OpenCV只是需要调一行代码的事情:

Ptr<Tracker> tracker;

tracker = TrackerBoosting::create();

tracker = TrackerMIL::create();

tracker = TrackerKCF::create();

tracker = TrackerTLD::create();

tracker = TrackerMedianFlow::create();

tracker = TrackerMOSSE::create();

tracker = TrackerCSRT::create();

       没错,就是这么简单。

       然后写了一段小程序测试这些代码。利用不同视频。以下是代码: 


#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/core/ocl.hpp>

using namespace cv;
using namespace std;

int main()
{
	Mat frame;
	Rect2d roi;
	// Create a tracker 创建跟踪器
	Ptr<Tracker> tracker;
	//跟踪算法类型
	//string trackerTypes[7] = { "BOOSTING", "MIL", "KCF", "TLD","MEDIANFLOW", "MOSSE", "CSRT" };
	string videoName;

	while (true)
	{



		while (true)
		{
			cout << "\n\n------------------------------------------------------------------\n";
			cout << "\n\n>> 可测试算法有  BOOSTING  MIL  KCF  TLD  MEDIANFLOW  MOSSE  CSRT" 
					"\n>> 请输入要测试的算法并按回车,退出输入exit。"
					"\n>> ";

			string trackerType;

			cin >> trackerType;

			if (trackerType == "exit")
			{
				return 0;
			}

			if (trackerType == "BOOSTING")
			{
				tracker = TrackerBoosting::create();
				cout << "\n>> 选择BOODSTING成功!\n";
				break;
			}
			else if (trackerType == "MIL")
			{
				tracker = TrackerMIL::create();
				cout << "\n>> 选择MIL成功!\n";
				break;
			}
			else if (trackerType == "KCF")
			{
				tracker = TrackerKCF::create();
				cout << "\n>> 选择KCF成功!\n";
				break;
			}
			else if (trackerType == "TLD")
			{
				tracker = TrackerTLD::create();
				cout << "\n>> 选择TLD成功!\n";
				break;
			}
			else if (trackerType == "MEDIANFLOW")
			{
				tracker = TrackerMedianFlow::create();
				cout << "\n>> 选择MEDIANFLOW成功!\n";
				break;
			}
			else if (trackerType == "MOSSE")
			{
				tracker = TrackerMOSSE::create();
				cout << "\n>> 选择MOSSE成功!\n";
				break;
			}
			else if (trackerType == "CSRT")
			{
				tracker = TrackerCSRT::create();
				cout << "\n>> 选择CSRT成功!\n";
				break;
			}
			else
			{
				cout << "\n>> 选择失败\n";
				continue;
			}
		}

		while (true)
		{
			cout << "\n +--------------+"
					"\n | 1.步行的人_1 |"
					"\n | 2.步行的人_2 |"
					"\n | 3.步行的人_3 |"
					"\n | 4.车         |"
					"\n | 5.超车       |"
					"\n | 6.大卫       |"
					"\n | 7.跳绳       |"
					"\n | 8.摩托越野   |"
					"\n | 9.熊猫       |"
					"\n | 10.大众汽车  |"
					"\n +--------------+"
					"\n\n>> 请输入要播放视频的序列号(例如4)"
					"\n>> ";

			int videoNo;
			cin >> videoNo;

			if (videoNo == 1)
			{
				videoName = "pedestrian1.mpg";
				cout << "\n>> 选择《步行的人 1》成功!";
				break;
			}
			else if (videoNo == 2)
			{
				videoName = "pedestrian2.mpg";
				cout << "\n>> 选择《步行的人 2》成功!";
				break;
			}
			else if (videoNo == 3)
			{
				videoName = "pedestrian3.mpg";
				cout << "\n>> 选择《步行的人 3》成功!";
				break;
			}
			else if (videoNo == 4)
			{
				videoName = "car.mpg";
				cout << "\n>> 选择《车》成功!";
				break;
			}
			else if (videoNo == 5)
			{
				videoName = "carchase.mpg";
				cout << "\n>> 选择《超车》成功!";
				break;
			}
			else if (videoNo == 6)
			{
				videoName = "david.mpg";
				cout << "\n>> 选择《大卫》成功!";
				break;
			}
			else if (videoNo == 7)
			{
				videoName = "jumping.mpg";
				cout << "\n>> 选择《跳绳》成功!";
				break;
			}
			else if (videoNo == 8)
			{
				videoName = "motocross.mpg";
				cout << "\n>> 选择《摩托越野》成功!";
				break;
			}
			else if (videoNo == 9)
			{
		
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值