我正在使用Python3.4和naconda 2.3.0在MacOS中尝试SIFT,但在执行我的代码时总是有找不到的命令。Vlfeat 0.9.20 sift和lib文件都包含在内,但不知道出了什么问题。我的代码如下:
from PIL import Image
from numpy import *
from pylab import *
import os
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)
来自编译器的错误是:
sh: sifttmp.pgm--output=IMG0232.sift--edge-thresh: command not found
它无法传输到要素文件,因此出现故障
我已经从互联网上咨询,并尝试了一些修改,但它仍然不起作用。还有其他从Python2.X到3.X的转换吗?谢谢
发布于 2016-01-20 07:33:40
据我所知,筛选命令行工具名为sift
。但是由于错误的字符串操作,最后的命令不包括所需的空格,因此是sifttmp.pgm--output=IMG0232.sift--edge-thresh
,这显然不存在。
替换
cmmd = str("sift" + imagename + "--output=" + resultname+ "" +params)
使用
cmmd = "sift {} --output={} {}".format(imagename, resultname, params)
上面的代码读起来更整洁,并且将包含当前代码中缺少的空格。可能是sift
可执行文件不在该路径上,因此您可能必须为其提供完整(绝对)路径。例如,如果/User/foo/Applications/
目录中有sift
cmmd = "/User/foo/Applications/sift {} --output={} {}".format(imagename, resultname, params)
https://stackoverflow.com/questions/34892944
复制相似问题