cv2 surf

这篇博客探讨了如何在Python中利用cv2模块实现SURF算法,它是一个加速版的SIFT。通过示例代码展示了SURF的运用,并提供了测试图像及结果。

本篇博客主要介绍cv2模块中的surf,即加速版的SIFT。

示例代码:

# encoding:utf-8
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('../data/butterfly.jpg', 0)
surf = cv2.xfeatures2d.SURF_create(400)

kp, des = surf.detectAndCompute(img, None)

print(surf.getHessianThreshold())

surf.setHessianThreshold(50000)

kp, des = surf.detectAndCompute(img, None)

img2 = cv2.drawKeypoints(img, kp, None, (255, 0, 0), 4)

plt.imshow(img2)
plt.show()

print(surf.descriptorSize())

print(surf.getExtended())
surf.setExtended(True)
kp, des = surf.detectAndCompute(img, None)
print(surf.descriptorSize())
print(des.shape)

测试图像:

OpenCV中使用 `cv2.SURF_create()` 创建SURF对象用于特征提取时,需要注意版本兼容性和模块依赖问题。SURF(Speeded-Up Robust Features)算法与SIFT类似,属于非免费算法,因此在OpenCV 3.x 及以上版本中被移至 `opencv_contrib` 模块中,不能直接在标准的OpenCV包中使用[^3]。 为了成功创建SURF对象并进行特征提取,需确保使用的是支持 `xfeatures2d` 模块的OpenCV版本。如果使用的是OpenCV 4.x版本,则必须安装 `opencv-python` 和 `opencv-contrib-python` 两个包,并且它们的版本需一致。若遇到调用 `cv2.xfeatures2d.SURF_create()` 报错的情况,可尝试使用 `cv2.SURF_create()`,但前提是OpenCV版本为3.4.x,并且已安装 `opencv-contrib-python` 包[^1]。 以下是一个使用 `cv2.SURF_create()` 的Python代码示例: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg', 0) # 创建SURF对象 surf = cv2.SURF_create() # 检测关键点 keypoints = surf.detect(image, None) # 绘制关键点 output_image = cv2.drawKeypoints(image, keypoints, None, flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT) # 显示结果 cv2.imshow('SURF Keypoints', output_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此外,SURF算法的实现也常见于C++代码中,如在OpenCV 3.x版本中使用 `cv::xfeatures2d::SURF::create()` 方法创建SURF检测器,并结合 `detect` 和 `drawKeypoints` 方法完成关键点检测与绘制[^2]。 ### 注意事项 - OpenCV 4.x版本中,SURF算法仍需依赖 `opencv_contrib` 模块,因此在编译OpenCV时应启用该模块。 - 若使用Python,推荐安装OpenCV 3.4.2版本,并搭配 `opencv-contrib-python` 扩展包以避免调用错误[^3]。 - 在C++项目中使用SURF时,需在编译时链接 `opencv_xfeatures2d` 库以支持SURF算法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cchangcs

谢谢你的支持~

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

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

打赏作者

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

抵扣说明:

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

余额充值