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