我正在使用Vlfeat.org的Sift实现。它具有以下功能,可以将功能保存到文件中。
def process_image(imagename,resultname,params="--edge-thresh 10 --peak-thresh 5"):
""" process an image and save the results in a file"""
if imagename[-3:] != 'pgm':
#create a pgm file
im = Image.open(imagename).convert('L')
im.save('tmp.pgm')
imagename = 'tmp.pgm'
cmmd = str("sift "+imagename+" --output="+resultname+
" "+params)
os.system(cmmd)
print 'processed', imagename, 'to', resultname
这里的行" os.system(cmmd)"应该将结果写在文件中吗?
我在ubuntu机器上,如果我执行" sift"作为终端中的命令,我得到的结果为"未找到"。在linux上,这个命令试图调用哪个进程?我需要将这些Sift功能保存到一个文件中,以便稍后我可以使用它来创建用于聚类的Bag of Words描述符。
https://github.com/jesolem/PCV/blob/master/PCV/localdescriptors/sift.py处的类似筛选实现也使用相同的行将结果保存到文件中。
答案 0 :(得分:0)
在linux上,这个命令试图调用哪个进程?
这是指vlfeat提供的命令行工具(请参阅vlfeat/src/sift.c):
$ ./sift
Usage: ./sift [options] files ...
Options include:
--verbose -v Be verbose
--help -h Print this help message
--output -o Specify output file
...
您可以使用vlfeat download page中的二进制分发(请参阅bin/glnxa64/sift
for Linux 64-bit),或直接克隆repo并从源代码编译。
请务必使用cmmd = str("/path/to/sift " ...)
调整路径,或在/usr/local/bin
等常用路径下安装(=复制)。