sift = cv2.xfeatures2d.SIFT_create()即使安装了contrib也不起作用

时间:2018-09-13 01:52:10

标签: opencv python-3.5

所以我正在尝试使用:

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),而我只是在使用空闲状态。这是在我尝试安装TensorFlow并尝试四处查看并安装了opencv-contrib-python之后发生的,但是我仍然遇到相同的错误。预先谢谢您,如果没有提供足够的信息,我深表歉意。

4 个答案:

答案 0 :(得分:46)

我有同样的问题。我更改了其他opencv-python和opencv-contrib-python版本,并解决了此问题。这是有关opencv-python的历史版本。

https://pypi.org/project/opencv-python/#history,我使用以下代码:

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所需的一切

祝你好运〜

答案 1 :(得分:12)

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

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

答案 2 :(得分:2)

这可能是由于opencv版本和opencv-contrib版本不匹配所致。 如果您使用CMake从源安装了opencv,并且源版本与opencv-contrib-python的版本不同,请卸载当前的opencv-contrib-python并执行pip install opencv-contrib-python==<version of the source>.X或其他兼容版本。 我正在运行的一个版本设置是opencv源(3.2),opencv-python(3.4.0.14)和opencv-contrib-python(3.4.2.17)

答案 3 :(得分:0)

由于 SIFT 专利到期,SIFT 已移至主存储库。 要在 Opencv 中使用 SIFT,您现在应该使用 cv2.SIFT_create() 而不是 cv2.xfeatures2d.SIFT_create() 。 (xfeatures2d 只存在于 contrib 包中,但 sift 现在是主包的一部分。)

下面的链接会有所帮助。 https://github.com/opencv/opencv/issues/16736