无法在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个回答

2

安装Python的OpenCV

pip install opencv-python

使用

cv2.SIFT_create()

代替

cv2.SIFT()

下面是使用opencv-python的示例代码

import cv2
img1 = cv2.imread('yourimg.png',0)
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1,None) #keypoint and descriptors
...

您也可以安装 "opencv-contrib-python" 并使用 "cv2.xfeatures2d.SIFT_create()",但这是次要的,取决于您自己。使用 Python 包 opencv-contrib-python 的工作代码:

import cv2
img1 = cv2.imread('yourimg.png',0)
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1,None) #keypoint and descriptors

谢谢


1
  1. 安装OpenCV-Contrib

  2. import cv2 sift = cv2.xfeatures2d.SIFT_create()

  3. sift.something()

这是安装Contrib的简便方法。


1
最好能够提供一些解释来说明你的代码,特别是第二点。另外请注意,第三点的格式有些问题。 - Dillon Davis

1

只需将opencv的版本更改为3.4.2.16。由于它是有专利保护的,因此在更新的版本中不可用。


1

请遵循此安装操作

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local
    -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON 
    -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON 
    -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

使用此命令将库安装到/usr/local/lib目录下。

6
请注意,并非每个人都可以在其家目录以外进行写入访问(尤其是在校园电脑上)。在 /usr/local/lib 安装通常需要 sudo 权限。 - Mårten W

1

1
你可以按照这种方式进行。这对你也一定有效! 步骤1:
virtualenv venv 
source venv/bin/activate

步骤2:

sudo python3 -m pip install opencv-python==3.4.2.16 
sudo python3 -m pip install opencv-contrib-python==3.4.2.16

步骤三:

import cv2
sift = cv2.xfeatures2d.SIFT_create()

请勿使用cv2.SIFT()。它会引发异常。

0

在Ubuntu 14.04 LTS下构建非免费软件包时,vizzy建议的方法也适用于OpenCV 2.4.8。

这个依赖问题可能会阻止非免费软件包的安装:

 libopencv-nonfree2.4 depends on libopencv-ocl2.4; however:
  Package libopencv-ocl2.4 is not installed.

很容易修复,因为缺失的软件包可以从刚刚构建的软件包中安装:

dpkg -i libopencv-ocl2.4_2.4.8+dfsg1-2ubuntu1_amd64.deb

然后,安装过程就像vizzy的答案所解释的那样进行。


0

将此更改为

sift = cv2.xfeatures2d.SIFT_create()

通过这个:

cv2.ORB_create()

0
以下页面提供一个相对不错的指南,需要进行少量更正:https://cv-tricks.com/how-to/installation-of-opencv-4-1-0-in-windows-10-from-source/ 在第8步中,当您选择项目的生成器(构建工具)时,请勿忘记在第二个字段中指定x64(如果需要)。如果不这样做,您将获得LNK1112错误,这是由于一个模块使用x64编译器创建,而另一个模块使用x86编译器创建引起的链接器错误。
接下来,在第9步中选择标志时,请不要忘记选中“OPENCV_ENABLE_NONFREE”并设置标志“OPENCV_EXTRA_MODULES_PATH”的路径。路径必须设置为opencv-contrib-python中的“modules”文件夹。
因此,使用SIFT和SURF需要同时安装opencv和opencv-contrib-python。

0

截至2020年6月,我认为这个版本(pip install -U opencv-contrib-python==3.4.2.16)仍然可用。所以安装它并享受吧。


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