SIFT实现Python错误

SIFT实现Python错误,python,sift,Python,Sift,我正在使用Python中vlfeat.org的SIFT实现vlfeat.py 我不断收到一个错误,指出索引太多,行号表示在执行从文件()读取功能时发生错误 我还注意到features1.sift文件是空的,这意味着执行process\u image()时出错 代码片段: from PIL import Image from pylab import * import vlfeat as vlf vlf.process_image('semper1.jpg','features1.sift',

我正在使用Python中vlfeat.org的SIFT实现vlfeat.py

我不断收到一个错误,指出索引太多,行号表示在执行
从文件()读取功能时发生错误

我还注意到features1.sift文件是空的,这意味着
执行process\u image()
时出错

代码片段

from PIL import Image
from pylab import *
import vlfeat as vlf

vlf.process_image('semper1.jpg','features1.sift', params="--edge-thresh 10 --peak-thresh 5")
l1,d1 = vlf.read_features_from_file('features1.sift')
image = array(Image.open('semper1.jpg'))

vlf.process_image('semper2.jpg','features2.sift', params="--edge-thresh 10 --peak-thresh 5")
l2,d2 = vlf.read_features_from_file('feautures2.sift')
image2 = array(Image.open('semper2.jpg'))   

matches = vlf.match(d1,d2)

imshow(image)

for k in xrange(len(matches)):
    if matches[k] > 0:
        plot(l1[k, 0], l1[k, 1], 'r.')
        plot([l1[k,0], l2[matches[k,0],0]], [l1[k,1], l2[matches[k,0],1]], 'b-')

show()
以下是process_图像的外观:

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

看起来它是异步的,因为它通过名为sift.exe的cmd调用外部程序

cmmd = str("sift "+imagename+" --output="+resultname+ " "+params) 
os.system(cmmd) 
这个PythonVLF模块是否有一个处理程序/回调函数,用于处理完成的时间

否则,如果可以修改process_image函数,则可以使用并等待外部应用程序完成后再返回process。 也看到

编辑:


确保可以从python工作目录访问外部sift.exe。

尝试较旧的vlfeat版本。我使用的二进制vlfeat-0.9.21-bin.tar.gz导致了该错误。尝试使用较旧版本的vlfeat-0.9.20-bin.tar.gz

SIFT现在是opencv主存储库的一部分(SIFT的专利已过期)

您可以使用最新版本的opencv(从今天的4.4开始)进行检查。尝试使用下面的代码进行筛选

cv2.SIFT_create()

进程图像是否可能以异步方式出现?这是进程图像()的外观:定义进程图像(imagename,resultname,params=“--edge thresh 10--peak thresh 5”):“如果imagename[-3:]=”则处理图像并将结果保存在文件“”中”pgm':#创建一个pgm文件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最好将其添加到原始帖子中,您可以将其格式化为代码。不知道如何正确显示。您确定可以将process_image()用于.jpg文件吗?您是否尝试过先转换为.pgm?