2016-01-20 72 views
0

我使用Python 3.4與naconda 2.3.0在MacOS中嘗試SIFT,但執行我的代碼時總是找不到命令。 Vlfeat 0.9.20篩選和lib文件包括在內,但不知道有什麼問題。我的代碼如下:SIFT使用Python 3.4

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的其他轉換?謝謝

回答

1

SIFT comand線工具,據我所知可稱爲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) 
+0

感謝您的回覆。我修改了代碼,但它仍然不起作用,錯誤也是一樣的。我仔細檢查了Libvl,並篩選出與我的sift.py文件在同一個文件夾中。看起來,Python無法捕捉到傳輸數據的過程。也許問題是在Python 3.4中使用cmmd,是嗎? –

+0

如果你做了我建議的改變,你不可能得到完全相同的錯誤信息。它可能是它仍然無法找到sift的可執行文件。在這種情況下,請添加完整路徑。我會更新我的答案以表明這一點。 –

+0

謝謝,它成功了。儘管我可以得到篩選結果,但將路徑放入編程代碼的方式不可執行。我會繼續尋找更好的解決方案。 –