粒子滤波 跟踪 源码修改,可以用了

首先感谢网友无偿提供了一个粒子滤波做跟踪的程序(http://download.csdn.net/detail/duke101/3204655),下下来不能用,应该是环境的问题。下面是我做的修改:

我的环境

ubuntu 11.10 32bit

opencv 2.3.0 (我前面推荐了一篇opencv 2.3.0在ubuntu 11.10下能安装成功的文章)


步骤

1. 首先阅读ReadMe文件,这个文件很重要(如果哪位好心人要分享程序,最好能加上这个文件)。我们可以看到如下内容:

2. Compiling

Some of the source files can be documented with Doxygen:
> make docs

To comile the executable programs:
> make bin

To compile everything (executables, documentation, etc.):
> make

To clean up:
> make clean

To get rid of executables, too:
> make distclean
make docs、 clean、 distclean都不是很重要,程序能否跑起来,只要make bin和make成功了就可以了。

2. make bin的时候会发现好几个问题:

a. 首先会出现前一篇文章提到的问题undefined reference to `cvLoadImage' 一个简单的解决方法

b. 有个我改了的地方不太确定是否有效,很可能不需要。在track/src下的Makefile文件,加上LIBS=`pkg-config --libs opencv` `pkg-config --libs gsl`,然后再下面生成三个obj文件加上$(LIBS),如下:

observation.o: observation.c $(INC_DIR)/observation.h
        $(CC) $(CFLAGS) $(INCL) $(LIBS) -c observation.c -o $@

particles.o: particles.c $(INC_DIR)/particles.h
        $(CC) $(CFLAGS) $(INCL) $(LIBS)  -c particles.c -o $@

utils.o: utils.c $(INC_DIR)/utils.h
        $(CC) $(CFLAGS) $(INCL) $(LIBS)  -c utils.c -o $@
应该不需要加上LIBS,因为opencv和gsl的库文件应该是在连接过程中加上的,这里只是生成obj文件,所以没有必要。连接的时候带上就好了。

c. 第三就是程序上要做修改了(在资源下载界面,作者说绝对可以运行,但是我有点怀疑了,即使可以,也不一定对吧)。在track/src/下的particle.c文件中,resample下的调用的qsort,第四个参数应该是particle_cmp,而不是&particle_cmp,因为函数名本来就是指针。

d. 第四个要改的地方在/track/src/track1.c程序中的export_frame函数中调用的cvSaveImage函数,这里只有两个参数,很可能是因为opencv库的改变,变为了三个参数,不上第三个参数“0”。

OK,搞定!

放心执行make bin吧,童鞋~


3. make很顺利。


4. 这一步是见证奇迹的时刻!也是骡子马拉出来溜溜的时刻!别走开啊~

运行> ./bin/track1 video.mpg没反应,囧,亲,你太着急了~

应该运行./bin/track1 video/soccer.avi,第一帧你先锁定这个人,然后空格键,奇迹终于出现了~~



参考资料:

yangyangcv对粒子滤波进行了简单形象的描述:http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html



你可能感兴趣的:(粒子滤波 跟踪 源码修改,可以用了)