OpenCV学习笔记(二)——特征提取与描述

这篇博客介绍了OpenCV中用于特征提取的三种算法:SURF、SIFT和ORB。特征点是图像中变化明显的点,常用于神经网络和SLAM领域。SURF算法稳定但对主方向的判断可能不准确,SIFT则是一种稳定的局部特征,而ORB是快速且适用于实时系统的特征描述子。文章还提及了这些算法的优缺点以及编译示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV学习笔记(二)——特征提取与描述

1. 特征点简介

什么是特征点?大体上说就是图像中变化比较明显的点,比如角点或者边界,在一面白色的墙上是提取不到任何特征点的。特征点有点类似于矩阵的特征值(当然只是一个比喻),用少量的bit描述大部分的图像信息,不管在神经网络还是SLAM领域,特征点都有非常多的用途。
我们平时提到特征点一般包括特征提取子和特征描述子两部分,提取子就是先采用算法检测出来一定的特征,比如FAST特征子和SIFT特征自,然后我们要再对于特征进行描述,比如BRIEF描述子和SIFT描述子,描述子可以用来进行匹配,原理就是两个描述子的距离比较近意味着这两个特征子很相似。
下面介绍常用的三种特征子以及opencv的使用例程。

2. SURF(Speed Up Robust Feature)

Surf采用 Henssian 矩阵获取图像局部最值还是十分稳定的,但是在求主方向阶段太过于依赖局部区域像素的梯度方向,有可能使得找到的主方向不准确,后面的特征向量提取以及匹配都严重依赖于主方向,即使不大偏差角度也可以造成后面特征匹配的放大误差,从而匹配不成功。
Surf是一种只利用到灰度性质的算法,忽略了色彩信息。

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/features2d/features2d.hpp>
#include <opencv2/nonfree/nonfree.hpp>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    // 读入图像
    cv::Mat image = cv::imread("../demo1.jpeg");

    cv::namedWindow("Original Image");
    cv::imshow("Original Image", image);


    // 特征点的向量
    std::vector<cv::KeyPoint> keypoints;

    // 构造SURF特征检测器
    cv::SurfFeatureDetector surf;

    //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值