首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIFT实现Python错误

SIFT实现Python错误
EN

Stack Overflow用户
提问于 2013-09-09 13:54:42
回答 3查看 1.3K关注 0票数 3

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

我一直得到一个错误,说明太多索引,行号表示在执行read_features_from_file()时会发生错误。

我还注意到,文件功能1.sift是空的,这意味着当executing process_image()出现问题时会出错。

代码片段

代码语言:javascript
复制
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_image的样子:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2018-02-08 20:26:01

试试以前的vlfeat版本,我使用了二进制vlfeat-0.9.21-bin.tar.gz,这给了我这个错误。尝试使用较早版本的vlfeat-0.9.20-bin.tar.gz。

票数 1
EN

Stack Overflow用户

发布于 2013-09-09 14:14:26

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

代码语言:javascript
复制
cmmd = str("sift "+imagename+" --output="+resultname+ " "+params) 
os.system(cmmd) 

这个python模块在完成处理时是否有一个处理程序/回调?

否则,如果可以修改process_image函数,则可以使用子过程并等到外部应用程序完成后才返回到进程。还请参见python子进程隐藏stdout并等待它完成

编辑:

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

票数 0
EN

Stack Overflow用户

发布于 2020-10-06 07:54:59

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

您可以使用opencv的最新版本(截止到今天的4.4)来检查它。尝试使用下面的代码筛选。

代码语言:javascript
复制
cv2.SIFT_create()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18699882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档