PCV库之调用SIFT.py中process_image()执行错误的解决方案

背景介绍:

windows10,python3.x,64位AMD R9处理器,ROG电脑,pycharm开发,已经安装好了PCV库

如何安装PCV库 请看我的博客Python之PCV库安装教程以及解说-CSDN博客文章浏览阅读111次,点赞5次,收藏3次。GitHub - Ultravioletrayss/PCVfile: 文档内含有python2 和python3的文件 一定要区分下载 Files containing Python 2 and Python 3 in the document must be downloaded separately。这样就是安装成功了 但是有些同学可能python setup.py install后没有任何反应 就像下面这张图一样(因为我一开始就是)下载的时候请对应好版本进行下载,具体内容我已经上传github中。https://blog.csdn.net/Ultravioletrays/article/details/138196025?spm=1001.2014.3001.5501

前置import代码如下 涉及到的库有:

# coding: utf-8
import math
import pickle
import sys
from matplotlib.pylab import *
from matplotlib import cbook, mlab, pyplot as plt
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import pygame, pygame.image
from pygame.locals import *
from PCV.geometry import homography, camera
from PCV.localdescriptors import sift
import matplotlib

 

在使用PCV库的SIFT文件时候,有这样几行代码一直报错,就是process_image这个函数

具体报错:

Traceback (most recent call last):
  File "C:\Users\ultra\Desktop\壶子.py", line 133, in <module>
    l0, d0 = sift.read_features_from_file('im0.sift')
  File "C:\Users\ultra\AppData\Local\Programs\Python\Python39\lib\site-packages\pcv-1.0-py3.9.egg\PCV\localdescriptors\sift.py", line 29, in read_features_from_file
  File "C:\Users\ultra\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\lib\npyio.py", line 1373, in loadtxt
    arr = _read(fname, dtype=dtype, comment=comment, delimiter=delimiter,
  File "C:\Users\ultra\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\lib\npyio.py", line 992, in _read
    fh = np.lib._datasource.open(fname, 'rt', encoding=encoding)
  File "C:\Users\ultra\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\lib\_datasource.py", line 193, in open
    return ds.open(path, mode, encoding=encoding, newline=newline)
  File "C:\Users\ultra\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\lib\_datasource.py", line 533, in open
    raise FileNotFoundError(f"{path} not found.")
FileNotFoundError: im0.sift not found.

大概就是说

这个文件没有生成出来,一看我的项目结构 确实没有

于是定位问题到sift.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)
    status=os.system(cmmd)
    if status != 0:
        print("命令执行失败,状态码:", status)
    else:
        print("命令执行成功")
    print('processed', imagename, 'to', resultname)

 上面就是核心代码,我对这段代码进行了修改 原始的代码如下图所示

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)

我增加了对于os.system语句的判定检查,从而定位到了错误就是这里. 

    cmmd = str("sift "+imagename+" --output="+resultname+
                " "+params)
    status=os.system(cmmd)

这两个语句发生了问题 os.system没有执行成功.

于是我在网上开始查找资料 找了半天 找到了一个

SIFT特征提取与检索_"cmmd = str(“sift \" + imagename + \" --output=” +-CSDN博客文章浏览阅读400次。1.前言所谓局部特征描述算子(SIFT)就是用来刻画图像中的这些局部共性的,而我们也可以将一幅图像映射(变换)为一个局部特征的集合。理想的局部特征应具有平移、缩放、旋转不变性,同时对光照变化、仿射及投影影响也应有很好的鲁棒性。传统的局部特征往往是直接提取角点或边缘,对环境的适应能力较差。SIFT针对局部特征进行特征提取,在尺度空间寻找极值点,提取位置,尺度,旋转不变量,生成特征描述子。SI..._"cmmd = str(“sift \" + imagename + \" --output=” + resultname + \" \" + params)"https://blog.csdn.net/qq_41634240/article/details/104649845简单来说就是要往你的项目里面导入几个文件即可

原因是:需要使用开源工具包VLFeat提供的二进制文件来计算图像的SIFT特征

                                                        打开下面网址进行下载VLFeat - Homeicon-default.png?t=N7T8https://www.vlfeat.org/

 页面如下:

下载完毕后 解压 或者直接打开压缩包 找到bin文件目录

注意系统版本我们一般都是win64 不用打开其他的maci或者glnxa64.

然后我们只需要三个文件vl.dll和sift.exe和vl.lib 复制到我们的项目文件里面去 如下图所示

然后就能运行了!

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Patrick Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值