sift = cv2.xfeatures2d.SIFT_create()无法工作,尽管已安装了contrib。

75

所以我正在尝试使用:

sift = cv2.xfeatures2d.SIFT_create()

并且它出现了这个错误:

cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) 
This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake 
option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'

我正在使用Python 3.5.0opencv(3.4.3),并且我只是使用IDLE。 这是在我尝试安装TensorFlow后发生的,我已经尝试查找并安装了opencv-contrib-python,但仍然出现相同的错误。 预先感谢您的帮助,如果我没有提供足够的信息,请原谅。

7个回答

156
我遇到了同样的问题。似乎在opencv >3.4.2.16中已经取消了SIRF和SURF。我选择了较旧的opencv-python和opencv-contrib-python版本并解决了这个问题。以下是关于opencv-python的历史版本,我使用了以下代码:
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

编辑

对于使用Anaconda的用户,请使用以下命令代替pip:

conda install -c menpo opencv

这将安装cv2 3.4.1和运行SIFT所需的所有内容。


5
这在 Python 3.7 上无法运行。我尝试了版本 3.4.2.16,但出现 DLL 找不到的错误。基础 OpenCV 可以在版本 3.4.5.20 上运行。 - Nithish V
2
@DragonKnight,我只能使用opencv-contrib-python版本3.4.5.20才能使其正常工作。 请使用“pip install opencv-contrib-python==3.4.5.20”进行安装。 - Nithish V
4
挺棘手的解决方案!看起来似乎只适用于特定版本!对于3.4.2.16版本,我猜测OPENCV_ENABLE_NONFREE被打开了;当我安装其他版本,如4.1.x.x时,它会报告一个错误,例如“OpenCV(4.1.0)此算法受专利保护,已在此配置中排除;请设置OPENCV_ENABLE_NONFREE CMake选项并重新构建库,在函数'cv::xfeatures2d::SIFT::create'中。” - YinchaoOnline
3
自OpenCV v3.4.3起,不再包含SIFT和SURF等专利算法。如果需要使用这些算法,可以选择使用v3.4.2.17版本或从源代码编译最新版本。 - HUSMEN
2
在Google Colab中對我沒有用,它顯示Python版本3.4.2.16不可用。 - RusJ
显示剩余7条评论

18
自从SIFT专利过期后,SIFT已经被移至主要存储库。
要在Opencv中使用SIFT,您应该使用
cv2.SIFT_create()

替代

cv2.xfeatures2d.SIFT_create()

xfeatures2d只存在于contrib包中,但sift现在是主要包的一部分。

这个链接会很有帮助。


SIFT专利于2020年3月6日到期。https://patents.google.com/patent/US6711293 - Mel
这应该是正确的答案,谢谢。 - Tms91

13

编辑: opencv-contrib-python-nonfree已从pypi中移除。

在Linux/MacOS上,我找到了更好的解决方案!要访问非免费探测器,请使用: pip install opencv-contrib-python-nonfree


4
无法找到符合要求的版本 opencv-contrib-python-nonfree(来自版本:)。没有找到匹配的分发版本 opencv-contrib-python-nonfree。 - Gulzar
@Gulzar,我也遇到了这个问题。可能的原因是:1.你的操作系统是Windows;2.你正在使用Python 3.8。根据这个页面:https://pypi.org/project/opencv-contrib-python-nonfree/,Windows支持已经取消,而且Python 3.8还不被支持(可能还没有)。我没有找到任何解决这个问题的方法,但在我的其他电脑上(Linux和MacOS),一切都很好。 - I.R.
@I.R. 你使用的是哪个Python版本? - Roi Mulia
@RoiMulia,我使用Python 3.6。 - I.R.

7
可能是由于opencv版本和opencv-contrib版本不匹配引起的。 如果您使用CMake从源代码安装了opencv,并且源版本与opencv-contrib-python版本不同,请卸载当前的opencv-contrib-python,然后执行pip install opencv-contrib-python==<源代码版本>.X或另一个兼容版本。 我正在运行的一个版本设置是opencv源代码(3.2),opencv-python(3.4.0.14)和opencv-contrib-python(3.4.2.17)。

请求信息应该添加到问题的评论部分。您可以编辑您的答案并仅留下解决方法/解决方案。 - Cleptus
感谢您的评论。我的opencv-python和opencv-contrib-python版本都是3.4.3.18。我认为它们应该是兼容的? - rhonda.rooster
我猜你是用 pip install 安装的。你是否进行了其他的 OpenCV 安装,更具体地说,你是否也从源代码安装了 OpenCV?如果是,源版本是什么?我已经使用与你相同的版本的 opencv-pythonopencv-contrib-python 进行了安装,但是我使用的是 3.2 源码安装,并且我得到了相同的错误消息。我想一个简单而懒惰的解决方法是卸载 opencv-pythonopencv-contrib-python,然后使用与我相同的版本重新安装并尝试一下。 - Ben
仍然给我这个错误:错误:OpenCV(4.2.0)/io/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1210:错误:(-213:该功能/特性未实现)此算法受专利保护,并在此配置中被排除;设置OPENCV_ENABLE_NONFREE CMake选项并重新构建库以创建函数。 - vanetoj
根据错误信息,您正在使用opencv-python==4.2.0。您是否还通过运行pip3 install opencv-contrib-python==4.2.0安装了opencv-contrib-python - Ben

1

我陷入这个问题已经好几个小时了,最终我解决了它,现在我将与您分享(以及其他人),如何解决。

以下是步骤:

1- 从官方网站下载CMAKE

2- 下载Visual Studio

3- 下载OpenCV Sources.zip文件。

4- 从Github下载OpenCV-contrib


首先,我们将创建一个名为“OpenCV”的目录,该目录将包含已下载并提取的“opencv-x.x.x”和“opencv_contrib-x.x.x”文件。
我们还将创建一个“build”目录,其中将包含新的OpenCV构建文件。

enter image description here


下一步是运行CMake(cmake-gui)应用程序。 输入图像描述
  • 接下来,您应该
    1. 在我们创建的“OpenCV”目录中找到提取的“opencv-x.x.x”文件夹。
    2. 对于“build”文件夹也是如此。

enter image description here

完成后,点击“配置”。

enter image description here


  • 应该会弹出一个窗口,请选择适当的配置enter image description here

  • 等待进度条完成。


  • 请检查OPENCV_ENABLE_NONFREE,然后再次单击“配置”,等待进度条。

enter image description here


  • 加载完成后,点击“生成”按钮,该按钮位于“配置”按钮旁边。

  • 恭喜,您已经完成了第一步!


  • 好的,关闭CMAKE(cmake-gui)应用程序并进入我们创建的“build”目录。

  • 找到“OpenCV.sln”并使用Visual Studio运行它。

  • 将vs构建模式从“Debug”更改为“Release”。

  • 在右侧的“Solution Explorer”菜单中,找到“CMakeTargets”>>“ALL_BUILD”,右键单击它并选择“Build”

  • 等待它构建完成(可能需要5分钟以上)

  • 再次,在右侧的“Solution Explorer”菜单中,找到“CMakeTargets”>>“INSTALL”,右键单击它并选择“Build”

enter image description here

enter image description here

  • 加载完成后,您就可以使用它了,就是这样!

额外信息:

  • 您可以通过pip自由卸载任何预安装的'opencv-python'和'opencv-contrib-python'
    pip uninstall opencv-python
    pip uninstall opencv-contrib-python
  • 重新启动您的设备。

  • 测试OpenCV。打开终端并输入以下命令:

    $ python
    >>> import cv2
    >>> cv2.__version__

希望这能帮到你,谢谢!


1
我使用的是OpenCV 4.7版本,这对我来说很有效。
cv2.SIFT_create()

由于一些专利问题,xfeatures2d.SIFT_create()方法已被移除,并以上述简短形式提供。

0

您可以尝试使用最新的Python版本。

pip install opencv-contrib-python==4.4.0.46


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