使用MinGW编译Efficient graph-based image segmentation

1. 首先下载MinGW-w64[1],一路安装下来,并不知道是否设置了环境变量:

使用MinGW编译Efficient graph-based image segmentation_第1张图片

编写一个简单的程序实验一下,同时用cmd命令重新开了一个窗口,也可以运行出结果:

使用MinGW编译Efficient graph-based image segmentation_第2张图片

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]

使用MinGW编译Efficient graph-based image segmentation_第3张图片

而打开segment-image.h中引用了头文件<cstdlib>,但根据[2]中该头文件里面只定义了rand随机数,并没有定义random,不知道这个是否在Linux下就有呢?所以需要在segment-image.h中将random换成rand。然后再次编译就成功了。

但这一次如果将这个segment.exe拖到cmd的窗口里面就出现了下面的错误,这个就说明刚才的MinGW安装并没有全局添加环境变量,临时的环境变量添加参考[4]

使用MinGW编译Efficient graph-based image segmentation_第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

你可能感兴趣的:(使用MinGW编译Efficient graph-based image segmentation)