TLD 单目标跟踪

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/tracking/tracker.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <iostream>
#include <vector>
using namespace cv;
// 移动鼠标 选取矩形框
void mouseClickCallback(int event, 
	int x, int y, int flags, void* userdata)
{
	// 矩形数据返回
	cv::Rect2d * pRect =
		reinterpret_cast<cv::Rect2d*>(userdata);
	// 鼠标按下操作
	if (event == cv::EVENT_LBUTTONDOWN)
	{
		std::cout << "LBUTTONDOWN ("
			<< x << ", " << y << ")" << std::endl;
		// 获取x,y坐标
		pRect->x = x;
		pRect->y = y;
	}
	// 鼠标抬起操作
	else if (event == cv::EVENT_LBUTTONUP)
	{
		std::cout << "LBUTTONUP (" 
			<< x << ", " << y << ")" << std::endl;
		// 获取矩形宽高
		pRect->width =  std::abs(x - pRect->x);
		pRect->height = std::abs(y - pRect->y);
	}
}
int main(int argc, char** argv)
{
	// 读取视频流
	cv::VideoCapture cap("..\\images\\car.avi"); 
	if (!cap.isOpened())
	{
		std::cout << " on data! " << std::endl;
		return -1;
	}
	cap.set(CV_CAP_PROP_POS_MSEC, 2*1000);
	cv::Mat frame;
	// 初始化TLD追踪器
	cv::Rect2d *rect(new cv::Rect2d);
	cv::Ptr<cv::TrackerTLD> tracker = 
		cv::TrackerTLD::createTracker();
	// 读取第一帧初始化矩形框
	cap >> frame; 
	cv::resize(frame, frame, cv::Size(), 0.25,0.25);
	cv::imshow("TrackerTLD", frame);
	// 鼠标移动获取矩形区域
	cv::setMouseCallback("TrackerTLD", mouseClickCallback,
		reinterpret_cast<void*>(rect));
	cv::waitKey();
	if (rect->area() == 0.0)
		return -1;
	// 跟踪器初始
	tracker->init(frame, *rect);
	double fps = 1.0;
	while(true)
	{
		cap >> frame;
		cv::resize(frame, frame, cv::Size(), 0.25,0.25);
		if (frame.empty()) 
			break;
		// 追踪器更新
		if (tracker->update(frame, *rect))
			// 绘制追踪结果
			cv::rectangle(frame, *rect, 
				cv::Scalar(255, 0, 0 ), 2, 1);
		cv::imshow("TrackerTLD", frame);
		char c = cv::waitKey(10);
		if (27 == c)
			break;
	}
	cap.release();
	return 0;
}





转载:http://blog.csdn.net/zhuwei1988

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值