当前位置:   article > 正文

OpenCV使用SURF和SIFT算法报错解决记录_attributeerror: module 'cv2' has no attribute 'sur

attributeerror: module 'cv2' has no attribute 'surf_create

OpenCV使用SURF和SIFT算法报错解决记录

1.报错代码,使用以下两种写法都会报错
# 创建SIFT和SURF特征提取器
# 写法1
sift = cv2.xfeatures2d.SIFT_create()
surf = cv2.xfeatures2d.SURF_create()
# 写法2
sift = cv2.SIFT_create()
surf = cv2.SURF_create()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第一种报错AttributeError: module ‘cv2’ has no attribute ‘xfeatures2d’

第二种报错AttributeError: module ‘cv2’ has no attribute ‘SURF_create’

2.查找网络上的解决办法,大部分分为两种
  • SIFT和SURF算法申请了专利,所以OpenCV新版本删除了这两个算法,所以需要回退到OpenCV3开头的版本或者OpenCV4开头的版本

  • 缺少opencv-contrib-python,pip install opencv-contrib-python即可解决(亲测没用

所以主要使用回退OpenCV版本的各种方法:

(1)直接卸载之前环境中的OpenCV,然后安装对应版本的OpenCV
# 卸载之前的OpenCV 
pip uninstall opencv-python
# 安装指定版本的OpenCV和pencv-contrib-python
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
  • 1
  • 2
  • 3
  • 4
  • 5

执行完以上代码之后,使用第一种写法调用SIFT和SURF算法,即

sift = cv2.xfeatures2d.SIFT_create()
surf = cv2.xfeatures2d.SURF_create()
  • 1
  • 2
(2)创建新的虚拟环境,设置python版本为3.6,然后新安装需要的包

因为我使用的虚拟环境中的python是3.9版本的,所以在安装3.4.2.16或者其他的不是最新版本的OpenCV时,会报以下错误:

Traceback (most recent call last):
File “< string>”, line 1, in < module >File “/tmp/pip-build-ilgdiy_6/opencv-contrib-python/setup.py”, line 10, in < module >import skbuildModuleNotFoundError: No module named ‘skbuild’

或者报错
note: This error originates from a subprocess, and is likely not a problem with pip.error: legacy-install-failure
× Encountered error while trying to install package.
╰─> opencv-python
note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

或者
Looking in indexes: https://pypi.anaconda.org/sts_dileeppj/simple
ERROR: Could not find a version that satisfies the requirement opencv-python4.4.0 (from versions: none)
ERROR: No matching distribution found for opencv-python
4.4.0
WARNING: Ignoring invalid distribution -pencv-python (c:\users\d

找了各种解决办法,
清除缓存,然后重新安装OpenCV

# 清除缓存
pip cache purge
  • 1
  • 2

安装scikit-build,参见https://zhuanlan.zhihu.com/p/491491510

scikit-build
  • 1

甚至说是因为有多个python环境导致的错误。。。。。。
在这里插入图片描述

尝试了很多方法都没有用,打算放弃的时候,发现了救星
关于python-opencv的SIFT,SURF算法调用错误
在这篇文章中发现可能安装不成功是因为python版本太高,所以安装不了OpenCV3的版本,然后创建了新的虚拟环境,设置python版本为3.6 ,然后在新的虚拟环境中安装OpenCV

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
  • 1
  • 2

因为是使用jupyter notebook,所以把新的虚拟环境应用到jupyter,参考博文是https://blog.csdn.net/fengLying/article/details/114929571

然后,在jupyter中新建文件时选择新建的opencv环境,如下图
在这里插入图片描述然后执行代码,顺利完成,成功显示了一个demo图片!
在这里插入图片描述至此,终于解决了SIFT和SURF在OpenCV中的调用问题!!!!
在这里插入图片描述

文中引用链接皆为学习转载,侵删。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/81133?site=
推荐阅读
相关标签
  

闽ICP备14008679号