OpenCV(四十二):Harris角点检测

news2025/5/25 13:07:09

1.Harris角点介绍

什么是角点? 角点指的是两条边的交点,图中红色圈起来的点就是角点。

Harris角点检测原理:首先定义一个矩形区域,然后将这个矩形区域放置在我的图像中,求取这个区域内所有的像素值之和,之后沿着多个方向移动我这个区域,再次计算新区域的像素值之和,如果移动前和移动后的像素值两者的差值比较小,那么就不是Harris角点,如果两者之间差值比较大,就认定移动前覆盖的区域内存在Harris角点。

如图:下图两条线形成角点,而矩形区域分别表示平面、边界、角点三种位置:

2.Harris角点计算

Harris角点检测原理:当移动窗口,窗口内像素值变化大就有Harris角点

Harris角点检测原理公式:

权重系数的引入是为了更加方便地去确定某一个点是Harris角点。

Harris角点检测原理公式写成矩阵形式:

由此可得出梯度协方差矩阵M

Harris评价函数来测量每个像素的角点程度 ,与梯度协方差矩阵M相关

     在这个公式中,R是角点响应函数的值,M是一个2x2的矩阵,描述了局部区域中像素的梯度信息,det(M)表示矩阵的行列式,trace(M)表示矩阵的迹,k是一个常数,用于调节响应函数的敏感度。

Harris评价函数可以用特征向量来表示。λ1和λ2分别是M的两个特征值。

通过对特征值λ1和λ2进行求解,我们可以计算Harris评价函数R,并据此来判断像素是否为角点。

  • 当λ1和λ2都较大且接近时,表示图像局部区域存在角点。
  • 当λ1和λ2都比较小或者差异较大时,表示图像局部区域是平坦或者边缘区域。

3.检测Harris角点函数cornerHarris()

void cv::cornerHarris ( InputArray  src,

OutputArray dst,

int   blockSize,

int   ksize,

double   K,

int         borderType = BORDER_DEFAULT

  • src:待检测Harris角点的输入图像,图像必须是CV 8U或者CV 32F的单通道灰度图像
  • dst: 存放Harris评价系数的R矩阵,数据类型为CV 32F的单通道图像,与输入图像具有相同的尺寸
  • blockSize:邻域大小
  • ksize: Sobel算子的半径,用于得到梯度信息   
  • k:计算Harris评价系数R的权重系数
  • borderType:像素外推算法标志

4.绘制角点函数drawKeypoints()

void drawKeypoints(InputArray image,

const std::vector<KeyPoint>& keypoints,

OutputArray outImage,

const Scalar& color = Scalar::all(-1),

int flags = DrawMatchesFlags::DEFAULT

)

参数说明:

  • image: 输入图像,可以是任意类型的Mat对象。

  • keypoints: vector类型的关键点,每个关键点包含其在图像中的位置和其他信息(如尺度、方向等)。

  • outImage: 输出图像,用于存储绘制了特征点的图像。可以与输入图像相同的尺寸和类型。

  • color: 绘制特征点的颜色,可以是Scalar对象或CV_RGB(R, G, B)宏定义,默认为Scalar::all(-1)表示随机颜色。

  • flags: 绘制标志,用于控制绘制方式。可以是以下常量之一:

    • DrawMatchesFlags::DEFAULT: 默认绘制方式,显示关键点的位置和大小。

    • DrawMatchesFlags::DRAW_OVER_OUTIMG: 将关键点绘制在输出图像上,而不是创建新的输出图像。

    • DrawMatchesFlags::DRAW_RICH_KEYPOINTS: 绘制丰富的特征点,显示位置、尺度、方向等详细信息。

5.示例代码:

void Harris_f(Mat image){
    //转成灰度图像
    Mat gray;
    cvtColor(image,gray,COLOR_BGR2GRAY);
    // 执行Harris角点检测
    Mat harris;
    cornerHarris(gray,harris,2,3,0.04);
    //归一化便于进行数值比较和结果显示
    Mat harrisn;
    normalize(harris,harrisn,0,255,NORM_MINMAX);
    //将图像的数据类型变成CV_8U
    convertScaleAbs(harrisn,harrisn);
    //寻找Harris角点
    vector<KeyPoint> keyPoints;
    for(int row=0;row<harrisn.rows;row++){
        for(int col=0;col<harrisn.cols;col++){
            int R=harrisn.at<uchar>(row,col);
            if(R<180){
                //将角点存入KeyPoint中
                KeyPoint keyPoint;
                keyPoint.pt.y=row;
                keyPoint.pt.x=col;
                keyPoints.push_back(keyPoint);
            }
        }
    }
    //绘制角点
    drawKeypoints(image,keyPoints,image,Scalar(0,0,255,255));
    //与显示结果
    imwrite("/sdcard/DCIM/harrisn.png",harrisn);
    imwrite("/sdcard/DCIM/result.png",image);
}

              (系数矩阵)                                               (绘制Harris角点) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】每日一题(半月斩)——day2

目录 一.选择题 1、以下程序段的输出结果是( ) 2、若有以下程序&#xff0c;则运行后的输出结果是&#xff08; &#xff09; 3、如下函数的 f(1) 的值为&#xff08; &#xff09; 4、下面3段程序代码的效果一样吗( ) 5、对于下面的说法&#xff0c;正确的是&#xf…

2024CFA一级notes百度网盘下载

024CFA一级notes百度网盘下载 2024CFA一级notes2024年CFA考纲已经正式发布&#xff0c;相比与老考纲&#xff0c;新考纲变化实在不算小。 面对2024年CFA新考纲的变化&#xff0c;我们在第一时间对2024年考试的新趋势和新变化&#xff0c;进行深度解读。具体总结如下&#xff…

ddtrace 系列篇之 dd-trace-java 项目编译

dd-trace-java 是 Datadog 开源的 java APM 框架&#xff0c;本文主要讲解如何编译 dd-trace-java 项目。 环境准备 JDK 编译环境(三个都要&#xff1a;jdk8\jdk11\jdk17) Gradle 8 Maven 3.9 (需要 15G 以上的存储空间存放依赖) Git >2 (低于会出现一想不到的异常&#xf…

短视频搭建矩阵源码--短视频矩阵源码搭建

短视频矩阵系统是一种通过将短视频内容进行分类、管理和展示的系统。它可以将用户上传或者选择的短视频按照不同的特定标签进行分类和管理&#xff0c;用户可以根据自己的兴趣和需求选择观看不同类别的短视频。 短视频矩阵源码的开发部署其实并不难&#xff0c;主要依托于抖音平…

springboot集成excel导入导出

1、引入依赖 <dependency><groupId>com.pig4cloud.excel</groupId><artifactId>excel-spring-boot-starter</artifactId><version>1.2.7</version> </dependency> 2、导出 ResponseExcel(name "测试列表") Post…

记录:移动设备软件开发(activity组件)

目录 前言Android简介和发展Android应用的基本组件介绍Activity组件Activity简介Activity的状态和生命周期 小结 前言 移动设备软件开发是指为智能手机、平板电脑等移动设备设计和开发应用程序的过程。移动设备软件开发涉及多种技术、平台和工具&#xff0c;例如Android、iOS、…

R语言CalibrationCurves包绘制带可信区间的校准曲线

校准曲线图表示的是预测值和实际值的差距&#xff0c;作为预测模型的重要部分&#xff0c;目前很多函数能绘制校准曲线。 一般分为两种&#xff0c;一种是通过Hosmer-Lemeshow检验&#xff0c;把P值分为10等分&#xff0c;求出每等分的预测值和实际值的差距。一种是绘制连续的校…

C#: 未能加载文件或程序集“xxx“

导入数据时&#xff0c;发生了异常&#xff0c;错误日志如下&#xff1a; 2023-09-11 09:20:49,304 [125] FATAL [(null)] - NPOI.POIXMLException ---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.IO.FileLoadException: 未能加…

OpenCV之GOTURN目标追踪

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 前言 一、goturn简介 二、预处理 三、模型加载 四、执行推理 五、解…

干洗店洗鞋店小程序家政保洁带商城一体化系统开发

干洗店洗鞋店小程序家政保洁带商城一体化系统开发&#xff1b; 一、核心功能介绍 1.(支持上门取送、送货到店、寄存网点、智能衣柜四种下单方式) 用户下单-上门取货拍照-送达门店工厂-入厂拍照-清洗完成拍照-上挂物品柜-物品送回 2.骑手端(接单上门、取货拍照&#xff0c;入库拍…

Can‘t load the model for ‘stabilityai/sd-vae-ft-mse‘

Can’t load the model for ‘stabilityai/sd-vae-ft-mse’. If you were trying to load it from ‘https://huggingface.co/models’, make sure you don’t have a local directory with the same name. Otherwise, make sure ‘stabilityai/sd-vae-ft-mse’ is the correct…

亚马逊两款毛绒玩具被紧急召回,毛绒玩具CPC认证办理(红色熊猫毛绒玩具和绿头鸭毛绒玩具)

近日&#xff0c;爱尔兰竞争和消费者保护委员会&#xff08;CCPC&#xff09;对在亚马逊上热卖的两款儿童毛绒玩具实施了召回&#xff0c;原因是存在窒息风险。 Wild Republic红色熊猫毛绒玩具 CCPC在公告中称&#xff1a;“在使用时&#xff0c;熊猫上的小部件&#xff08;眼…

第20章_瑞萨MCU零基础入门系列教程之DAC输出模拟信号

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

算法分析与设计编程题 递归与分治策略

棋盘覆盖 题目描述 解题代码 // para: 棋盘&#xff0c;行偏移&#xff0c;列偏移&#xff0c;特殊行&#xff0c;特殊列 void dividedCovering(vector<vector<int>>& chessBoard, int dr, int dc, int sr, int sc, int size) {if (size 1) return;size / 2…

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…

图的基本知识

图 一、图的定义和基本术语二、图的存储结构&#xff08;1&#xff09;数组&#xff08;邻接矩阵表示法&#xff09;&#xff08;2&#xff09;数组&#xff08;邻接矩阵&#xff09;的实现&#xff08;3&#xff09;邻接表&#xff08;链式表示法&#xff09;&#xff08;4&am…

6、如何将 Flink 中的数据写入到外部系统(文件、MySQL、Kafka)

目录 1、如何查询官网 2、Flink数据写入到文件 3、Flink数据写入到Kafka 4、Flink数据写入到MySQL 1、如何查询官网 官网链接&#xff1a;官网 2、Flink数据写入到文件 传送门&#xff1a;Flink数据写入到文件 3、Flink数据写入到Kafka 传送门&#xff1a;Flink数据写入…

2023-9-14 最长公共子序列

题目链接&#xff1a;最长公共子序列 #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n, m; char a[N], b[N]; int f[N][N];int main() {cin >> n >> m;cin >> a 1 >> b 1;for(int i 1; i < n…

30WSIP网络音柱

SV-7042VP 30WSIP网络音柱 一、描述 SV-7042VP是我司的一款SIP网络音柱&#xff0c;具有10/100M以太网接口&#xff0c;将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率30W。SV-7042VP作为SIP系统的播放终端&#xff0c;可用于需要广播播放的场所&#xff0c;…

用node开发微信群聊机器人第③章

▍PART 序 怎么https请求第三方api 有哪些免费的、付费的第三方api 记得先去看前几章&#xff0c;看明白了再来看本章&#xff0c;不然你会一脸懵。点合集》#程序员干货 记得先把小程序加个收藏不然等下你要调试的时候找不到》“程序员实用资源” ▍PART 正文 来&#xff…