为什么surf会报错
代码 #surfsurf = 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' 这个错误是因为SURF算法的实现涉及到了专利问题,OpenCV默认不包含这部分代码。要解决这个问题,你可以尝试以下两种方法:
方法一:使用SIFT算法
SIFT是另一种常用的特征提取算法,可以代替SURF进行图像匹配。只需要将代码中的`cv2.xfeatures2d.SURF.create()`替换为`cv2.xfeatures2d.SIFT_create()`即可。
方法二:重新编译OpenCV库
你可以按照错误信息中的提示,设置`OPENCV_ENABLE_NONFREE`选项并重新构建OpenCV库。这样做的话,会将SURF算法的专利限制去除,但请注意,这可能会涉及到一些法律风险,所以在商业项目中慎重选择。
无论你选择哪种方法,重点是理解错误的原因和解决方法。祝你编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-5-10 20:33
这个错误是因为SURF算法的实现涉及到了专利问题,OpenCV默认不包含这部分代码。要解决这个问题,你可以尝试 ...
怎么重新编译OpenCV库 星辰皇 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]