使用 OpenCV 做跟踪使用GOTURN

GOTURN模型的下载地址

将模型放到工程中

测试代码

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

using namespace std;
using namespace cv;

int main(int argc, char** argv) {

	String video_name = "video.avi";
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout << "***Could not initialize capturing...***\n";
		return -1;
	}
	//cv::Ptr<cv::Tracker> tracker = cv::TrackerKCF::create();

	//cv::Ptr<cv::Tracker> tracker = cv::TrackerCSRT::create();
	//cv::Ptr<cv::Tracker> tracker = cv::TrackerBoosting::create();
	//cv::Ptr<cv::Tracker> tracker = cv::TrackerMOSSE::create();
	cv::Ptr<cv::Tracker> tracker = cv::TrackerGOTURN::create();
	//cv::Ptr<cv::Tracker> tracker = cv::TrackerTLD::create();




	if (!tracker)
	{
		cout << "***Error in the instantiation of the tracker...***\n";
		return -1;
	}

	Mat frame;
	namedWindow("Tracking API", 1);
	Mat image;
	Rect2d boundingBox;
	bool paused = false;

	cap >> frame;
	cout << frame.type() << " " << frame.channels() << " ";
	frame.copyTo(image);
	imshow("Tracking API", image);
	waitKey(1);
	boundingBox = selectROI("Tracking API", image, false, false);
	bool initialized = false;
	int frameCounter = 0;
	int64 timeTotal = 0;

	for (;; )
	{
		if (!paused)
		{
			if (initialized) {
				cap >> frame;
				if (frame.empty()) {
					break;
				}
				frame.copyTo(image);
			}

			if (!initialized)
			{
				//initializes the tracker
				if (!tracker->init(frame, boundingBox))
				{
					cout << "***Could not initialize tracker...***\n";
					return -1;
				}
				initialized = true;
			}
			else if (initialized)
			{
				int64 frameTime = getTickCount();
				//updates the tracker
				if (tracker->update(frame, boundingBox))
				{
					rectangle(image, boundingBox, Scalar(255, 0, 0), 2, 1);
				}
				frameTime = getTickCount() - frameTime;
				timeTotal += frameTime;
			}
			imshow("Tracking API", image);
			frameCounter++;
		}

		char c = (char)waitKey(1);
		if (c == 'q')
			break;
		if (c == 'p')
			paused = !paused;
	}

	double s = frameCounter / (timeTotal / getTickFrequency());
	printf("FPS: %f\n", s);
	getchar();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值