最近刚接触kcf,在Ubuntu上运行代码,碰到一些问题,借鉴了网上其他人的方法,简单记录一下过程。
KCF代码下载
KCF的代码可以去作者的网站去下载:
http://www.robots.ox.ac.uk/~joao/circulant/index.html
如下图:
这里我下了Muti-scale C++和Streamlined C++,解压缩以后分别得到文件KCFcpp-master和kcf-master。可能会需要用到Trax,下面记录了Trax的编译过程。
Trax编译
Trax可以在如下链接中下载:Trax库
我在安装Trax的时候发现有两个版本,分别是1.1.4和2.0.1,这里要用1.1.4版本:
否则后面编译kcf-master文件里的main_trax.cpp时会报如下错误:
no matching function for call to ‘trax::Server::wait(trax::Image&, trax::Region&, trax::Properties&)’ int tr = handle.wait(img, reg, prop);
这是因为main_trax.cpp调用的Server::wait()函数与2.0.1版本的Trax中定义的Server::wait()函数的参数列表不一致,所以要根据实际情况来选择正确版本的Trax。
下载完以后,解压缩,进入Trax文件目录,输入如下命令进行编译(更详细的内容可以参考Trax编译文档):
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
这样就完成了Trax的编译,默认情况下,仅构建C库,如果要启用其他模块,则必须在$ cmake … 这一步通过添加标志来告知CMake:
$ cmake -DBUILD_OPENCV=ON -DBUILD_CLIENT=ON ..
在编译的时候还曾遇到如下问题:
Found OpenCV Windows Pack but it has not binaries compatible with your configuration.
You should manually point CMake variable OpenCV_DIR to your build of OpenCV library.
Found package configuration file: … but it set OpenCV_FOUND to FALSE so package “OpenCV” is considered to be NOT FOUND.
解决方法是在CMakeLists.txt里的find_package(OpenCV REQUIRED)前面添加如下内容:
set(OpenCV_DIR /home/…/opencv/build) //编译opencv的build目录
set(OpenCV_FOUND 1)
KCF代码编译
以KCFcpp-master为例,进入KCFcpp-master,执行如下命令:
$ mkdir build
$ cd build
$ cmake ..
$ make
得到可执行文件KCF。
准备数据
数据序列可以在如下链接下载:数据序列
以Basketball为例,下载下来的数据有图片img和object位置文件groundtruth_rect.txt,将img文件夹里图片的路径存入到images.txt文件中:
import os
path='.../Basketball/img'
dirs=os.listdir(path)
dirs.sort()
f=open('images.txt','w')
for dir in dirs:
img=path+'/'+dir
f.write(img+'\n')
f.close()
将第一张图片中object的位置写入到region.txt文件中,groundtruth_rect.txt文件里面就是每张图object的位置(左上角坐标、宽、高),这里我们只需要第一张图的object的位置(需要是四个点的坐标),因此要做一下转化,例如groundtruth_rect.txt文件里第一行是:198,214,34,81,那么region.txt里的内容就应该是:198, 214, 198, 295, 232, 214, 232, 295
程序运行
将images.txt和region.txt放入到build文件夹,终端中输入:
$ ./KCF show
即可查看运行结果了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)