openCV中的KeyPoints、DMatch、以及drawMatches函数(sift算法会用到的)

本文详细介绍了OpenCV中用于SIFT算法的关键点(keypoint)类、匹配(Dmatch)结构以及如何使用drawMatches函数绘制匹配关键点。通过理解这些概念,读者将更好地掌握SIFT算法在图像处理中的应用。

1. keypoint类

/*!
 The Keypoint Class

 The class instance stores a keypoint, i.e. a point feature found by one of many available keypoint detectors, such as
 Harris corner detector, cv::FAST, cv::StarDetector, cv::SURF, cv::SIFT, cv::LDetector etc.
*/

class  KeyPoint
{
public:
    //! the default constructor默认构造函数
    KeyPoint() : pt(0,0), size(0), angle(-1), 
                 response(0), octave(0), class_id(-1) {}
    //! the full constructor
    KeyPoint(Point2f _pt, float _size, float _angle=-1,
             float _response=0, int _octave=0, int _class_id=-1)
          :pt(_pt), size(_size), angle(_angle),
           response(_response), octave(_octave), class_id(_class_id) {}
    //! another form of the full constructor
    KeyPoint(float x, float y, float _size, float _angle=-1,
             float _response=0, int _octave=0, int _class_id=-1)
          :pt(x, y), size(_size), angle(_angle),
           response(_response), octave(_octave), class_id(_class_id) {}

    size_t hash() const;

    //! con
OpenCV 中自带的 SIFT(Scale-Invariant Feature Transform)算法接口函数可以通过 `cv2.xfeatures2d.SIFT_create()` 来调用。SIFT 是一种用于图像特征检测和描述的算法,具有尺度不变性和旋转不变性,广泛应用于图像匹配、图像检索和三维重建等领域。 在使用 SIFT 接口之前,需要确保 OpenCV 是带有额外模块(`opencv_contrib`)编译安装的,因为 SIFT 算法实现位于 `xfeatures2d` 模块中,不属于 OpenCV 的核心模块[^1]。 ### SIFT 接口函数的基本使用方法 ```python import cv2 as cv # 读取图像 image = cv.imread('example.jpg', cv.IMREAD_GRAYSCALE) # 创建 SIFT 对象 sift = cv.xfeatures2d.SIFT_create() # 检测关键点并计算描述子 keypoints, descriptors = sift.detectAndCompute(image, None) # 绘制关键点 output_image = cv.drawKeypoints(image, keypoints, None, flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) # 显示结果 cv.imshow('SIFT Keypoints', output_image) cv.waitKey(0) cv.destroyAllWindows() ``` ### 参数说明 - `nfeatures`:最多保留的关键点数量,默认为 0,表示不限制数量。 - `nOctaveLayers`:每组尺度空间的层数,默认为 3。 - `contrastThreshold`:对比度阈值,用于过滤低对比度的关键点。 - `edgeThreshold`:边缘响应阈值,用于去除边缘响应过强的点。 - `sigma`:初始高斯核的标准差,用于图像金字塔的构建。 ### 注意事项 - OpenCV 3.x 及以上版本中,SIFT 接口位于 `xfeatures2d` 模块中,需确保已安装 `opencv_contrib` 包。 - OpenCV 4.x 版本同样支持 SIFT,但同样依赖 `opencv_contrib` 的构建配置[^1]。 ### SIFT 算法的优势 - 对图像的尺度、旋转和光照变化具有良好的不变性。 - 提取的特征向量可以用于匹配、识别和分类等任务。 - 在多种图像处理任务中表现出色,尤其是在图像匹配和三维重建方面。 ### 其他相关接口 除了 SIFTOpenCV 还提供了 SURF、ORB、BRISK、AKAZE 等多种特征检测与描述算法接口,可根据具体应用场景选择合适的算法。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值