由于工作上需要C++版的Normalized Cut 代码,爬遍几乎整个网络,找到了一个比较靠谱的版本,但期间各种配置,终于搞定,做下记录。
代码原始版:https://github.com/bsankaran/clutter_segmentation/tree/master/ncuts-evh
一、 首先自己在Ubuntu系统上验证了下,配置的时候:
1 先下载Boost Eigen3 两个库,放到/usr/include路径下(这两个是.h版的库,不需要安装)
2 安装依赖库arpack: sudo apt-get install libarpack2-dev libsuperlu3-dev
3 git clone源码,进行make
make的时候出现错误: no declarations were found by argument-dependent lookup,跟进去发现找不到的是继承里的虚函数
解决:在makefile里添加 -fpermissive
make搞定
二、Linux->Window的移植
自己的程序是在VS上编写的,所以需要移植到VS,但开源代码是Linux下的。成功移植的步骤如下:
1 移植ARPACK,参考文章:http://www.cs.cmu.edu/~barbic/arpack.html,需要注意的是
(1) 现在已经淘汰FC=g77的Fortran的编译器,需要改为gfortran,修改文件 ARmake.inc:
FC = gfortran 注释掉FFLAGS = -O -cg89
(2)修改 second.f 文件为:
SUBROUTINE SECOND( T )
REAL T
CALL CPU_TIME(T)
RETURN
END
2 arcompp.h里加入 #define __GNUG__ 不然提示找不到 arcomplex标志
3 编译即可