Sift = cv2.xFeature ures2d.SIFT_create()即使安装了贡献文件也不能工作

所以我试着用:

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,但是我仍然得到相同的错误。提前谢谢你,如果我没有包括足够的信息,我道歉

121584 次浏览

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

我也有同样的问题。看起来 SIRF 和 SurF 是 在 opencv > 3.4.2.16中不再可用。我选择了较老的 opencv-python 和 opencv-Contrib-python 版本,并解决了这个问题。下面是关于 opencv-python 的 历史版本,我使用以下代码:

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

剪辑

对于蟒蛇用户只是这个而不是 pip

conda install -c menpo opencv

这将安装 cv23.4.1和运行 SIFT 所需的所有内容

祝你好运

编辑: 从 Pypi 中移除 opencv-contrib-python-nonfree

在 Linux/MacOS 上,我找到了一个更好的解决方案: pip install opencv-contrib-python-nonfree

自从 SIFT 专利到期后,SIFT 已经转移到主要的回购协议。 要在 Opencv 使用 SIFT,现在应该使用 cv2.SIFT _ create () ,而不是 cv2.xFeature ures2d.SIFT _ create ()。(xFeature ures2d 只存在于贡献包中,但是 sift 现在是主包的一部分。)

下面的链接将是有帮助的。 Https://github.com/opencv/opencv/issues/16736