无法在OpenCV中使用SURF和SIFT算法

71

我正在尝试做一件简单的事情,比如

detector = cv2.SIFT()

并且出现了这个糟糕的错误

detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'

因为安装了cv2,所以我不理解。

cv2.__version__

$Rev: 4557 $

我的系统是Ubuntu 12.04。

或许有人遇到了同样的问题并能够帮助我。

编辑:

长话短说,testypypypy.py

import cv2

detector = cv2.SIFT()

错误:

Traceback (most recent call last):
  File "testypypy.py", line 3, in <module>
    detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT

如果我使用SURF,它可以正常工作,因为SURFdir(cv2)中,但是如果我也使用cv2.BFMatcher(),我会得到同样的错误...... 所以它缺失了,我必须添加它,但我不知道该如何添加。


你有查看过 dir(cv2) 的输出结果来确认 SIFT 是否被列出了吗? - Foon
只列出了“SIFT_COMMON_PARAMS_AVERAGE_ANGLE”和“SIFT_COMMON_PARAMS_FIRST_ANGLE”。我能否更新“SIFT”以及像“cv2.BFMatcher()”这样的其他内容?如果可以,该如何操作?:)谢谢 - Linda
Marten建议的步骤对我很有用。 :) 我在AWS上运行的Ubuntu 12.4上尝试了它。第4步中我改变了一件事:使用“sudo make install”而不是“make install”。我还能够使用下面链接中的说明使SIFT和SURF在Fedora上工作: http://www.g7smy.co.uk/?p=366 - user1146904
2
也许您拥有更新的OpenCV版本:尝试使用cv2.xfeatures2d.SURF_create代替cv2.SURF(许多教程都在使用旧的调用方法)。 - Paulo Scardine
SIFT和SURF位于贡献库部分,必须在安装时特别包含。请参见https://docs.opencv.org/4.1.1/d2/dca/group__xfeatures2d__nonfree.html。 - fmw42
22个回答

0

以上提供的解决方案都对我无效。我使用Anaconda,并发现opencv版本3.3.1仍启用了Sift。如果您想在隔离的conda环境中进行测试,请尝试以下方法,这是受@A.Ametov答案的启发。

conda create -n testenv opencv=3.3.1     
conda activate testenv

conda activate myenv
python
#Check version of opencv being used
>>> import cv2
>>> cv2.__version__
#Check if Sift is available
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>

-1

试试这个

!pip 安装 opencv-contrib-python==4.4.0.44 sift = cv2.SIFT_create()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接