运行cv2.xfeatures2d.SIFT_create()时报错The function/feature is not implemented的解决方法,亲测可用

本文介绍了解决OpenCV中SIFT功能因专利限制无法使用的问题。通过卸载现有版本并安装特定版本的opencv-python和opencv-contrib-python,再利用清华大学镜像加速下载过程。

opencv-contrib-Python编译出现错误
sift = cv.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’

解决方法:

卸载之前的opencv-python和opencv-contrib-python 版本。
pip uninstall opencv-python
pip uninstall opencv-contrib-python

 

pip install opencv-python==3.4.2.16

pip install opencv-contrib-python==3.4.2.16

你会发现,这个下载速度太慢,使用国内清华大学的镜像,速度飞起来

pip install opencv-python==3.4.2.16 -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install opencv-contrib-python==3.4.2.16  -i https://pypi.tuna.tsinghua.edu.cn/simple/

我的python版本是3.5

这个问题的核心在于 OpenCV 中的某些算法(如 SURF)由于专利限制,默认配置下并未启用。因此当你尝试调用 `cv2.xfeatures2d.SURF_create()` 函数时会抛出误。 以下是解决问题的具体步骤: --- ### **解决方案** #### 1. 安装包含非自由功能的 OpenCV 版本 OpenCV 的默认版本不支持一些受专利保护的功能(例如 SIFT 和 SURF)。你需要安装一个名为 `opencv-contrib-python` 的库,它包含了这些附加模块,并允许你通过设置特定选项来启用它们。 **操作步骤:** ```bash pip uninstall opencv-python -y pip install opencv-contrib-python==4.5.5.62 ``` 注意:这里我们推荐使用明确指定的版本(如 4.5.5.62),因为高版本可能会移除对某些旧函数的支持。 如果需要验证是否成功安装了该扩展包,可以运行以下命令: ```python import cv2 print("Contrib modules installed:", hasattr(cv2, "xfeatures2d")) ``` #### 2. 确保正确导入并初始化 SURF 检器 在代码中直接创建 SURF 对象即可。假设已经完成了上述依赖项更新,则无需额外修改业务部分逻辑。 示例代码片段如下所示: ```python import cv2 # 初始化SURF特征检器 surf = cv2.xfeatures2d.SURF_create(hessianThreshold=400) keypoints, descriptors = surf.detectAndCompute(image, None) print(f"Detected {len(keypoints)} keypoints.") ``` #### 3. 自己从源码编译 (高级用户) 如果你希望完全控制环境或者避免频繁升级导致的问题,可以选择手动下载官方发行版开源项目文件夹然后依据文档说明完成自定义构建过程。简而言之就是在 cmake 配置阶段添加参数 `-DOPENCV_ENABLE_NONFREE=ON` 启动对应开关再继续生成目标二进制产物。 --- ### § 相关问题 §: 1. 如果不想用 SURF 可以选择哪些替代方案? (比如 ORB、BRISK 或者 FAST+BRIEF 组合等) 2. 如何检查当前系统内的 OpenCV 是否已开启非自由特性? 3. 在 Linux 平台上如何按照上面提到的方式重新编译带完整特性的本地化副本?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘小舟舟,游大世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值