OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
Harris 角点检测器。
该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs,对于每个像素 (x,y),它在一个 blockSize×blockSize 的邻域内计算一个 2×2 的梯度协方差矩阵 M(x,y)。然后,它计算以下特征值:
dst ( x , y ) = d e t M ( x , y ) − k ⋅ ( t r M ( x , y ) ) 2 \texttt{dst} (x,y) = \mathrm{det} M^{(x,y)} - k \cdot \left ( \mathrm{tr} M^{(x,y)} \right )^2 dst(x,y)=detM(x,y)−k⋅(trM(x,y))2
图像中的角点可以作为该响应图的局部最大值被找到。
cv::cornerHarris 是 OpenCV 库中的一个函数,用于检测图像中的角点。该函数基于 Harris 角点检测算法,该算法通过对图像中的每个像素计算一个响应函数来确定角点的位置。响应函数的值越大,表示该像素越有可能是角点。
函数原型
void cv::cornerHarris
(InputArray src,OutputArray dst,int blockSize,int ksize,double k,int borderType = BORDER_DEFAULT
)
参数
- 参数src 输入单通道 8 位或浮点图像。
- 参数dst 用于存储 Harris 检测器响应的图像。它具有类型 CV_32FC1 并且大小与 src 相同。
- 参数blockSize 邻域大小(参见 cornerEigenValsAndVecs 的详细信息)。
- 参数ksize Sobel 操作符的孔径参数。
- 参数k Harris 检测器的自由参数。参见上述公式。
- 参数borderType 像素外推方法。参见 BorderTypes。不支持 BORDER_WRAP。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cout << "Error opening image" << std::endl;return -1;}// 计算 Harris 角点响应cv::Mat harrisResponse;int blockSize = 2; // 邻域大小int ksize = 3; // Sobel 梯度算子的大小double k = 0.04; // Harris 角点检测器中的自由参数cv::cornerHarris( img, harrisResponse, blockSize, ksize, k );// 显示 Harris 角点响应图像cv::normalize( harrisResponse, harrisResponse, 0, 255, cv::NORM_MINMAX, CV_8U );cv::namedWindow( "Harris Response", cv::WINDOW_NORMAL );cv::imshow( "Harris Response", harrisResponse );// 可选:标记最强的角点double maxVal;cv::minMaxLoc( harrisResponse, nullptr, &maxVal );// 设置阈值double threshold = maxVal * 0.5;// 创建一个新的图像来标记角点cv::Mat markedImg = img.clone();// 标记角点std::vector< cv::Point > corners;cv::Mat_< uchar > responseMat = harrisResponse;for ( int y = 0; y < responseMat.rows; ++y ){for ( int x = 0; x < responseMat.cols; ++x ){if ( responseMat( y, x ) > threshold ){corners.push_back( cv::Point( x, y ) );}}}// 在图像中标记角点for ( const auto& corner : corners ){cv::circle( markedImg, corner, 2, cv::Scalar( 0, 0, 255 ), 2 ); // 画红色圆圈}// 显示标记角点的图像cv::namedWindow( "Marked Corners", cv::WINDOW_NORMAL );cv::imshow( "Marked Corners", markedImg );cv::waitKey( 0 );return 0;
}
运行结果
原始图:

Harris Response:

Marked Corners:

相关文章:
OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs,对于每个像素 (…...
Apache Doris 2.1.6 版本正式发布
亲爱的社区小伙伴们,Apache Doris 2.1.6 版本已于 2024 年 9 月 10 日正式发布。2.1.6 版本在 Lakehouse、异步物化视图、半结构化数据管理持续升级改进,同时在查询优化器、执行引擎、存储管理、数据导入与导出以及权限管理等方面完成了若干修复。欢迎大…...
一些常用的 Docker 命令
一些常用的 Docker 命令 涵盖了查看镜像、启动镜像等基本操作: 1. 查看 Docker 镜像 列出所有本地存储的镜像: docker images这会显示所有已经下载到本地的镜像,包括仓库名、标签、镜像 ID、创建时间和大小。 2. 拉取 Docker 镜像 从 Dock…...
【机器学习】--- 自然语言推理(NLI)
引言 随着自然语言处理(NLP)的迅速发展,**自然语言推理(Natural Language Inference, NLI)**已成为一项重要的研究任务。它的目标是判断两个文本片段之间的逻辑关系。这一任务广泛应用于机器阅读理解、问答系统、对话…...
大话C++:第11篇 类的定义与封装
1 类的定义 在C中,类的定义通常使用class关键字开始,后面紧跟类的名称。类可以包含数据成员(变量)和成员函数(方法)。 在C中,类可以更加详细地展开,包括数据成员(变量&…...
六种主流ETL工具的比较与Kettle的实践练习指南--MySQL、hive、hdfs等之间的数据迁移
在数据集成和数据仓库建设中,ETL(Extract, Transform, Load)工具扮演着至关重要的角色。本文将对六种主流ETL工具进行比较,并深入探讨Kettle的实践应用。 一、六种主流ETL工具比较 1. DataPipeline 设计及架构:专为…...
一天一道算法题day07
找出字符中第一个匹配的下标 题目描述 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1&#…...
电机学习-有感BLDC开环控制(六步换相)
文章目录 1. 简介2. 六步换向控制3. 机械角度和电角度4.转子位置获取5.霍尔传感器读取测试6.速度开环控制6.1 PWM设置6.2死区时间 1. 简介 BLDC的反电动势一般是梯形的反电动势,所以采用方波控制。如图2-1所示,是一个简化的内转子无刷直流电机。我们通过…...
《深度学习》PyTorch框架 优化器、激活函数讲解
目录 一、深度学习核心框架的选择 1、TensorFlow 1)概念 2)优缺点 2、PyTorch 1)概念 2)优缺点 3、Keras 1)概念 2)优缺点 4、Caffe 1)概念 2)优缺点 二、pytorch安装 1、安装 2、…...
Linux:进程(四)
目录 一、进程优先级 二、Linux调度与切换 1.背景 2.进程切换 一、进程优先级 背景:在计算机中,软硬件资源是有限的,而进程想要访问某一种资源,就得通过排队来保证访问资源的过程是有条不紊的。 Linux下对优先级的定义。执行命…...
CTC loss 博客转载
论文地址: https://www.cs.toronto.edu/~graves/icml_2006.pdf 为了对应这个图,我们假设一种符合的模型情况: 英文OCR,37个类别(26个小写字母10个汉字空格),最大输出长度8个字符 模型预测结果…...
TryHackMe 第3天 | Pre Security (中)
该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识,本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…...
c语言中“qsort函数”和“结构体成员访问变量”
qsort函数: qsort是c语言中的库函数,这个函数是对数据进行排序(对任意) 冒泡排序中排列整数顺序用的函数只适用于整形,而qsort函数适用与所有数据 排序算法 冒泡排序 插入 选择 快速 void qsort{ void * base&…...
【MySQL】在MySQL中STR_TO_DATE()
1.在MySQL中STR_TO_DATE() 在MySQL中,STR_TO_DATE() 函数用于将字符串转换为日期格式。这个函数非常有用,当你需要将文本数据转换为可由MySQL日期和时间函数处理的格式时。 1.1 语法 STR_TO_DATE() 函数的基本语法如下: STR_TO_DATE(date…...
PCIE集成验证(五)MSI/MSI-X中断
PCI 总线最早采用的中断机制是 INTx,这是基于边带信号的。后续的 PCI/PCI-X版本,为了消除边带信号,降低系统的硬件设计复杂度,逐渐采用了 MSI(Message Signaled Interrupt)/MSI-X(消息信号中断)的中断机制。…...
leetcode 380.O(1) 时间插入、删除和获取随机元素
实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时࿰…...
基于MicroPython的ESP8266控制PS2摇杆模块的设计方案
以下是一个基于MicroPython的ESP8266控制PS2摇杆模块的设计方案: 一、硬件准备: 1. 一块ESP8266开发板,如NodeMCU 2. 一个带有X、Y轴模拟输出和Z轴(按钮)数字输出的PS2摇杆模块 3. 杜邦线若干 4. 3.3V直流电源 二、硬件连接:…...
Spring Boot 3项目使用Swagger3教程
Spring Boot 3项目使用Swagger3教程 Swagger:自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…...
linux-系统备份与恢复-系统恢复
Linux 系统备份与恢复:系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分,它指的是在系统崩溃、硬件故障、误操作或安全问题后,恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断,并确保系…...
【Rust语言】std::collections::HashMap用法
HashMap用法文档 文章目录 创建键的要求 增删改查增: insert删: remove/remove_entry改单点修改 get_mut整体修改 values_mut/iter_mut 查集增改于一身的entry 遍历只读遍历into_values() 与 into_keys()容量、实际长度、判空导出清除重定容量 use std::collections::HashMap;创…...
保姆级教程:在Ubuntu 22.04上搭建PXE服务器,自动化安装麒麟桌面系统(含NFS/TFTP/DHCP配置)
从零构建PXE自动化部署平台:Ubuntu 22.04环境下的麒麟系统无人值守安装实战 在中小型技术团队或开发者个人的工作场景中,频繁部署测试环境往往成为效率瓶颈。传统的光盘或U盘安装方式不仅耗时费力,更难以保证多台设备配置的一致性。本文将带您…...
Go语言中的日志管理:从log到zap
Go语言中的日志管理:从log到zap 作为一个写了十几年代码的Go后端老兵,我深刻体会到日志管理在应用开发中的重要性。好的日志系统可以帮助我们快速定位问题,监控系统运行状态,甚至分析用户行为。Go语言提供了标准库log包来处理日志…...
幼儿园招生报名小程序源码 微信报名系统
介绍这是一款幼儿园招生报名小程序,以新学期招生报名为核心,兼顾幼儿园环境图文展示(室内、室外、文娱、起居)、招生政策答疑、最新动态新闻、食谱介绍、报名项目海报分享等功能。家长可填写幼儿基本信息、住址信息、监护人信息等…...
GTE模型在网络安全中的应用:恶意文本检测
GTE模型在网络安全中的应用:恶意文本检测 1. 引言 每天都有海量的文本内容在互联网上流动,从社交媒体帖子到客户服务对话,从新闻评论到私人消息。在这其中,隐藏着不少恶意内容:网络欺诈信息、仇恨言论、虚假信息、垃…...
RDF实战指南:从入门到精通
1. RDF基础入门:从概念到实战 第一次接触RDF时,我也被那些专业术语搞得一头雾水。直到把它想象成"资源界的快递单",才突然开窍——就像快递单记录着"谁寄了什么给谁",RDF用主语-谓语-宾语的三元组记录着"…...
Eino:Agent的LLM抽象
拨开迷雾看本质:从零推导 ChatModelAgent(模型适配层与 Agent 运行时) 在 react.md 里看到的是 “ReAct 作为范式” 的推导;而本篇把视角切到 chatmodel.go 作为工程实现:它不只是“为了 ReAct 画图”,更是…...
AutoGLM-Phone-9B开箱即用:跟着这篇,快速部署你的移动端大模型
AutoGLM-Phone-9B开箱即用:跟着这篇,快速部署你的移动端大模型 1. AutoGLM-Phone-9B简介 1.1 什么是AutoGLM-Phone-9B AutoGLM-Phone-9B是一款专为移动端优化的多模态大语言模型,它能够同时处理视觉、语音和文本三种输入方式。这个模型最大…...
CosyVoice集成Java Web应用:构建智能语音播报后端服务
CosyVoice集成Java Web应用:构建智能语音播报后端服务 最近在做一个在线教育平台的项目,需要给课程内容加上语音播报功能。一开始我们试过一些现成的语音合成服务,要么价格太贵,要么声音不够自然。后来发现星图GPU平台上有个Cosy…...
CogVideoX-2b CSDN专用版:5分钟部署你的本地AI视频导演
CogVideoX-2b CSDN专用版:5分钟部署你的本地AI视频导演 1. 从想法到画面,只差一个启动按钮 想象一下这样的场景:你脑子里闪过一个绝妙的视频创意——也许是“一只戴着宇航员头盔的柴犬在月球表面蹦跳”,也许是“赛博朋克都市的雨…...
大麦抢票自动化:用Python脚本突破手速限制的实战指南
大麦抢票自动化:用Python脚本突破手速限制的实战指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 抢票困境与技术破局 每到热门演出开票时刻,无数粉丝都会陷入相同的困…...
