OpenCV图像特征提取与检测C++(二)Harris角点检测、Shi-Tomasi 角点检测、亚像素级别角点检测

本文介绍了OpenCV中的角点检测方法,包括Harris角点检测、Shi-Tomasi角点检测以及亚像素级别的角点检测。角点作为图像的重要特征,用于运动检测、图像匹配等领域。文章详细讲解了角点检测的原理,并提供了相关算法的API及代码示例。

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

图像特征类型可以分为三种:
边缘,角点,斑点。
其中,角点是个很特殊的存在,他们在图像中可以轻松定位,因为角点位于两条边缘的交点,代表了两条边缘变化的方向上的点,所以他们是可以精确定位的二维特征,甚至可以达到亚像素精度。
角点定义:如果某一点在任意方向的一个微小变动都会引起灰度很大的变化,则称为角点。
角点通常被定义为两条边的交点,更严格的说,角点的局部邻域应该具有两个不同区域的不同方向的边界
1,一阶导数(灰度的梯度)的局部最大化所对应的像素点
2,两天及两条以上边缘的交点
3,图像中梯度值和梯度方向的变化速率都很高的点
4,角点处的一阶导数最大,二阶导数为0,指示物体边缘变化不连续的方向

角点检测算法分为三类:
1,基于灰度图像的角点检测
2,基于二值图像的角点检测
3,基于轮廓曲线的角点检测
角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。也称为特征点检测。
角点响应函数R为:
R=λ1*λ2-k(λ1+λ2)的平方,k在0.04-0.06之间
Harris角点检测:
角点响应函数R为:
R=λ1*λ2-k(λ1+λ2)的平方,k在0.04-0.06之间
API:

void cornerHarris(InputArray src,   源图像,填Mat类的对象即可,且需为单通道8位或者浮点型图像
OutputArray dst,     这个参数用于存放Harris角点检测的输出结果,和源图片有一样的尺寸和类型。
int blockSize,         领域的大小即计算y1y2时候矩阵的大小
int ksize,                 表示Sobel()算子的孔径大小
double k,               k在0.04-0.06之间
intborderType=BORDER_DEFAULT  图像像素的边界模式
)

步骤:

  • 转为灰度图像
  • 角点检测找出角点
  • 转为二值图像

代码:

#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
#include <string> 
#include<fstream> 
using namespace cv;
using namespace std;

Mat src,graysrc;
int thresh_v = 130;
int thresh_max = 255;

void m_harris(int, void*) {
    Mat dst,nordst,scadst,retdst;
    dst = Mat::zeros(src.size(), CV_32FC1);
    cornerHarris(gray
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值