KCF代码运行并显示效果(C++)

本文介绍了如何在C++环境中调试并运行KCF目标跟踪算法,详细阐述了从代码和数据集下载,到在Qt Creator中配置与运行的过程。通过在终端或Qt Creator中运行,并添加适当延迟,展示了KCF跟踪效果。同时提供了一个自定义目标区域的小工具,以方便调整初始跟踪框,增强了跟踪的灵活性。
摘要由CSDN通过智能技术生成

KCF代码运行并显示效果(C++)

学习一个算法,如果能够先调通代码看到效果肯定能激发起学习下去的欲望。

KCF是经典的目标跟踪算法,作者把代码公开在个人主页上,这里把如何运行C++ 版本的代码做一下记录。

一、调试环境:

Ubuntu16.04 + QT5 + CMake3.11.3 + OpenCV3.4.7

二、代码及数据集下载

1. 程序代码:

KCF算法的提出: High-Speed Tracking with Kernelized Correlation Filters J. F. Henriques, R. Caseiro, P. Martins, J. Batista TPAMI 2015
代码链接:http://www.robots.ox.ac.uk/~joao/circulant/index.html
这是Henriques大神主页,在Source code那部分下载
在这里插入图片描述
我这里以 Multi-scale C++ 为例子,下载下来后名字是KCFcpp-master.zip, 解压缩(我把文件夹名字改为了KCFcpp,个人习惯),用Qt Creator 打开,如图:
在这里插入图片描述
(原来的CMakeLists.txt 中工程名字为test,太容易混淆了,我给改成了kcf_test)

2. 数据集下载

我这里使用了常用的 Visual Tracker Benchmark 数据集,在视觉跟踪领域这是个非常常用的数据集,可以整个都下载下来研究研究,这里只简单说用到的。

数据集官网:http://cvlab.hanyang.ac.kr/tracker_benchmark/datasets.html
比如这里用到了 TB-50 Sequences 里面的第一个 basketball,如图:
在这里插入图片描述
我的下载下来之后放在了下面的路径里

/home/mk90/Documents/OTB/TB50/basketball

basketball文件夹里面的img文件夹里面放了图片序列,groundtruth_rect.txt文件中存放了每一帧图片里面目标的位置,格式是 左上角点的坐标 + 目标框宽度高度。
当然其他的图像序列也可以都下载下来。

三、调试运行

1. 如果使用终端进行调试

在程序所在的KCFcpp目录下打开终端,输入:

mkdir build
cd build
cmake ..
make

这时会在build文件夹中生成 KCF 可执行程序。
这时候,要在build文件夹里面新建两个文件: images.txt 和 region.txt
images.txt 中存放图片序列的名字,如图:
在这里插入图片描述
可以使用wps的表格,写好第一个图片的路径 /home/mk90/Documents/OTB/TB50/basketball/img/0001.jpg
之后下拉,就能自动按数字顺序得到图片序列列表,然后全部选中,复制到 images.txt 里面。

region.txt文件中存放第一帧图片中目标的位置,这个可以首先从数据集里面groundtruth_rect.txt文件中找到第一帧图片中目标位置,根据左上角点的坐标和目标框宽高换算成四个点的坐标位置。
我的region.txt 里面的内容:

198,214,198,295,232,214,232,295

准备完毕后,在build文件夹下面打开终端, 输入

./KCF show

就能够运行并且显示跟踪效果了。

2. 在Qt Creator 中运行

流程类似,build后会生成目标的build文件夹(名字可能根据自己QtCreator的设置有所不同),在里面同样新建images.txt 和 region.txt,填好内容。
运行之前,要添加命令行参数 show
在这里插入图片描述

3. 结果如图:

在这里插入图片描述

4. 一个小技巧

数据集中有的图像序列只有一百多张图片,运行程序可能几秒钟就结束了,看不清楚效果,为了方便观察,可以使用c++的sleep或者usleep函数进行延迟,具体改动是:
首先在runtracker.cpp文件中添加头文件

#include <unistd.h> 

然后找到

		// Update
		else{
   
			result = tracker.update(frame);
            rectangle( frame, Point( result.x, result.y ), Point( result.x+result.width, result.y+result.height), Scalar( 0, 255, 255 ), 2, 8 );
			resultsFile << result.x << "," << result.y << "," <&l
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值