鱼C论坛

 找回密码
 立即注册
查看: 333|回复: 3

[已解决]为什么surf会报错

[复制链接]
发表于 2024-5-10 20:33:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
   代码 #surf
    surf = cv2.xfeatures2d.SURF.create()
    kp1, des1 = surf.detectAndCompute(img_gray1, None)
    kp2, des2 = surf.detectAndCompute(img_gray2, None)

    outImage1 = cv2.drawKeypoints(img_1, kp1, outImage=np.array([]), flags=0)
    outImage2 = cv2.drawKeypoints(img_2, kp2, outImage=np.array([]), flags=0)
    cv2.imwrite("surf1.png", outImage1)
    cv2.imwrite("surf2.png", outImage2)

报错:cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv_contrib\modules\xfeatures2d\src\surf.cpp:1028: 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::SURF::create'
最佳答案
2024-5-10 20:33:19
这个错误是因为SURF算法的实现涉及到了专利问题,OpenCV默认不包含这部分代码。要解决这个问题,你可以尝试以下两种方法:

方法一:使用SIFT算法
SIFT是另一种常用的特征提取算法,可以代替SURF进行图像匹配。只需要将代码中的`cv2.xfeatures2d.SURF.create()`替换为`cv2.xfeatures2d.SIFT_create()`即可。

方法二:重新编译OpenCV库
你可以按照错误信息中的提示,设置`OPENCV_ENABLE_NONFREE`选项并重新构建OpenCV库。这样做的话,会将SURF算法的专利限制去除,但请注意,这可能会涉及到一些法律风险,所以在商业项目中慎重选择。

无论你选择哪种方法,重点是理解错误的原因和解决方法。祝你编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-10 20:33:19 | 显示全部楼层    本楼为最佳答案   
这个错误是因为SURF算法的实现涉及到了专利问题,OpenCV默认不包含这部分代码。要解决这个问题,你可以尝试以下两种方法:

方法一:使用SIFT算法
SIFT是另一种常用的特征提取算法,可以代替SURF进行图像匹配。只需要将代码中的`cv2.xfeatures2d.SURF.create()`替换为`cv2.xfeatures2d.SIFT_create()`即可。

方法二:重新编译OpenCV库
你可以按照错误信息中的提示,设置`OPENCV_ENABLE_NONFREE`选项并重新构建OpenCV库。这样做的话,会将SURF算法的专利限制去除,但请注意,这可能会涉及到一些法律风险,所以在商业项目中慎重选择。

无论你选择哪种方法,重点是理解错误的原因和解决方法。祝你编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-10 20:39:23 | 显示全部楼层
FishC 发表于 2024-5-10 20:33
这个错误是因为SURF算法的实现涉及到了专利问题,OpenCV默认不包含这部分代码。要解决这个问题,你可以尝试 ...

怎么重新编译OpenCV库
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-10 20:39:46 | 显示全部楼层
星辰皇 发表于 2024-05-10 20:39
怎么重新编译OpenCV库


重新编译OpenCV库需要一定的开发环境和工具,下面是一个简单的步骤:

1. 下载OpenCV源代码:
   - 进入OpenCV官方网站(https://opencv.org/)下载页面。
   - 选择适合你的操作系统的版本并下载源代码。

2. 安装CMake:
   - CMake是一个用于构建和生成项目的跨平台工具。
   - 访问CMake官方网站(https://cmake.org/)下载页面,并选择适合你的操作系统的版本进行下载和安装。

3. 配置CMake:
   - 打开CMake GUI界面,设置源代码路径为你下载OpenCV源代码的路径。
   - 设置目标路径为你想要生成OpenCV库的路径(例如:C:\OpenCV)。
   - 点击"Configure"按钮,选择你所使用的编译器,并确保没有出现错误信息。
   - 点击"Generate"按钮,生成编译所需的工程文件。

4. 编译OpenCV库:
   - 在命令行中进入到你所指定的目标路径(例如:C:\OpenCV)。
   - 执行命令`make`开始编译OpenCV库。这个过程可能需要一些时间,取决于你的电脑性能和网络状况。

5. 安装OpenCV库:
   - 编译完成后,在目标路径中会生成相应的OpenCV库文件。
   - 根据你的操作系统,将库文件配置到你所使用的开发环境中。
   - 按照你的开发环境的相关文档进行安装和配置。

请注意,重新编译OpenCV库可能会涉及到一些复杂的操作和依赖关系,因此在执行之前请确保你有足够的了解和经验。

祝你成功!编程加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 16:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表