【发布时间】:2020-10-06 15:54:59
【问题描述】:
我在 Python 中使用来自 vlfeat.org 的 SIFT 实现,vlfeat.py。
我不断收到一条错误消息,指出索引过多,并且行号表明在执行read_features_from_file() 时发生了错误。
我还注意到文件 features1.sift 是空的,这意味着executing process_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_image 的样子:
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
【问题讨论】:
-
process_image 是否可能异步发生?
-
这是 process_image() 的样子:def process_image(imagename,resultname,params="--edge-thresh 10 --peak-thresh 5"): """ 处理图像并保存结果在一个文件中""" if 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?