1. 首先下载MinGW-w64[1],一路安装下来,并不知道是否设置了环境变量:
编写一个简单的程序实验一下,同时用cmd命令重新开了一个窗口,也可以运行出结果:
2. 编译Efficient graph-based image segmentation
根据其提供的Makefile:
INCDIR = -I. DBG = -g OPT = -O3 CPP = g++ CFLAGS = $(DBG) $(OPT) $(INCDIR) LINK = -lm .cpp.o: $(CPP) $(CFLAGS) -c $< -o $@ all: segment segment: segment.cpp segment-image.h segment-graph.h disjoint-set.h $(CPP) $(CFLAGS) -o segment segment.cpp $(LINK) clean: /bin/rm -f segment *.o clean-all: clean /bin/rm -f *~在mingw-w64打开的窗口中编译,会出现下面的错误,其中g++的参数命令意义参考[3]
而打开segment-image.h中引用了头文件<cstdlib>,但根据[2]中该头文件里面只定义了rand随机数,并没有定义random,不知道这个是否在Linux下就有呢?所以需要在segment-image.h中将random换成rand。然后再次编译就成功了。
但这一次如果将这个segment.exe拖到cmd的窗口里面就出现了下面的错误,这个就说明刚才的MinGW安装并没有全局添加环境变量,临时的环境变量添加参考[4]
3. 在Matlab调用的代码:
prefix = num2str(floor(rand(1)*10000000)); fn1 = ['./tmpim' prefix '.ppm']; fn2 = ['./tmpimsp' prefix '.ppm']; setenv('PATH', [getenv('PATH') ';D:\Programs\mingw-w64\i686-5.2.0-posix-dwarf-rt_v4-rev0\mingw32\bin']); segcmd = 'E:\code\download\segment\segment 0.8 100 100'; imwrite(im, fn1); system([segcmd ' ' fn1 ' ' fn2]);
参考:
【1】http://sourceforge.net/projects/mingw-w64/
【2】http://www.cplusplus.com/reference/cstdlib/
【3】GCC/G++编译参数含义 http://blog.csdn.net/zhuxiaoyang2000/article/details/5575194
【4】MinGw以及临时加路径 http://blog.csdn.net/lsxpu/article/details/43228607