opencv进阶14-Harris角点检测-cv2.cornerHarris

类似于人的眼睛和大脑,OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后,可以将这些特征作为数据
库,支持基于图像的搜索。此外,我们可以使用关键点将图像拼接起 来,组成更大的图像。(想象一下把很多图片放到一起组成一幅360°的全景图。)

本节将展示如何使用OpenCV检测图像中的特征,并利用这些特征
匹配和检索图像。在本节的学习过程中,我们会获取样本图像并检测
其主要特征,然后试着在另一幅图像中找到与样本图像匹配的区域。
我们还将找到样本图像和另一幅图像匹配区域之间的单应性或者空间
关系。

Harris角点检测是计算机视觉领域中一种经典的角点检测算法,它可以用于许多应用场景。

以下是一些Harris角点检测的应用场景

图像配准: 在图像配准中,Harris角点检测可以用于找到两幅图像中具有相似特征的角点,从而进行图像对齐和匹配。

物体跟踪: 在目标跟踪中,Harris角点检测可以用于提取图像中的显著特征,帮助识别和跟踪目标。

摄像头标定: 在摄像头标定中,Harris角点检测可以用于检测摄像头拍摄图像中的角点,帮助计算摄像头的内参和外参。

三维重建: 在三维重建中,Harris角点检测可以用于提取图像中的关键特征点,帮助建立图像间的对应关系,从而实现场景的三维重建。

物体识别: 在物体识别中,Harris角点检测可以用于提取图像中的特征点,帮助识别和分类不同的物体。

自动驾驶: 在自动驾驶领域,Harris角点检测可以用于检测图像中的道路边缘和关键特征,帮助自动驾驶系统判断道路情况。

图像拼接: 在图像拼接中,Harris角点检测可以用于提取图像中的角点,帮助找到不同图像之间的对应关系,实现图像拼接和全景图生成。

图像匹配: 在图像匹配中,Harris角点检测可以用于寻找两幅图像中具有相似特征的角点,从而进行图像配准和匹配。

理解特征检测和匹配的类型

OpenCV中最常用的特征检测和描述符提取算法如下:

  • Harris:该算法适用于角点检测。
  • SIFT:该算法适用于斑点检测。
  • SURF:该算法适用于斑点检测。
  • FAST:该算法适用于角点检测。
  • BRIEF:该算法适用于斑点检测。
  • ORB:它是Oriented FAST和Rotated BRIEF的联合缩写。ORB对于角点和斑点的组合检测很有用。

可以通过下列方法进行特征匹配:

  • 蛮力匹配。
  • 基于FLANN的匹配。

可以通过单应性进行空间验证。

究竟什么是特征?

为什么图像的某个特定区域可以归类为特征,而其他区域则不能分类为特征呢?广义地说,特征是图像中独特或容易识别的一个感兴趣区域。具有高密度纹理细节的角点和区域是好的特征,而在低密度区域(如蓝天)不断重复出现的模式就不是好的特征。边缘是好的特征,因为它们倾向于把图像分割成两个区域。斑点(与周围区域有很大差别的图像区域)也是一个有趣的特征。

大多数特征检测算法都围绕着角点、边缘和斑点的识别展开,有
些还关注岭(ridge)的概念,其中岭可以概念化为细长物体的对称
轴。(例如,想象一下识别图像中的道路。)

有些算法更擅长识别和提取特定类型的特征,所以了解输入图像
是什么很重要
,这样就可以利用OpenCV中的最佳工具了。

检测Harris角点

什么是角点?

在计算机视觉和图像处理中,角点(Corner)是图像中突出的、有角度的、明显的像素点。角点通常位于图像中物体的边缘、纹理或其他特征的交叉点,是图像中的显著特征点。角点对于图像处理中的许多任务,如特征匹配、目标跟踪、3D重建等,具有重要的作用。

角点具有以下特征:

局部极大值: 在角点周围的邻域中,角点的像素值应该是局部最大值。

方向变化: 角点处的像素点方向会在不同方向上有较大的变化,这是因为角点是明显的图像特征。

明暗对比: 角点处的像素点周围可能是明暗对比较大的区域,因为角点是由物体的边缘、纹理等特征交叉形成的。

可重复性: 角点在不同的尺度和旋转下仍然可以被检测到,这使得它们在不同场景中都有用途。

下面看一下角点的类型:
在这里插入图片描述

cv2.cornerHarris 函数说明

dst=cv2.cornerHarris(img, blockSize, ksize, k)

公式中参数:

  • img表示原始图像
  • blockSize表示角点检测中的领域大小
  • ksize表示Sobel求导中使用的窗口大小
  • k表示Harris 角点检测方程中的自由参数,取值参数为[0,04, 0.06]

代码示例:

import numpy as np
import cv2# 读取待检测的图像
img = cv2.imread('chess_board.png')
# 转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
# 调用函数 cornerHarris,检测角点,其中参数 2 表示 Sobel 算子的孔径大小,23 表示 Sobel 算子的孔径大小,0.04 表示 Harris 角点检测方程中的 k 值
dst = cv2.cornerHarris(gray,2,23,0.04)dst = cv2.dilate(dst,None)
# 将检测到的角点标记出来
img[dst>0.01*dst.max()]=[0,0,255]cv2.imshow('dst',img)cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述
这里,我们选取的像素的分值至少是最高分值的1%,并在原始图
像中将这些像素涂成红色。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell 基础3

在第一行后面追加内容 在第3行后面追加内容 在每行前面加 在第四行前面加入 -i表示添加在文本中 在每个22后面加 $a 在文件最后一行追加 匹配到每个包含22的行,并在之前加 把第7行整行替换 将所有匹配22的行替换 删除第5行 隔行删除,删除奇数行 删除偶数…

供应链 | 大数据报童模型:基于机器学习的实践见解

论文解读:李欣 马玺渊 作者:Gah-Yi Ban, Cynthia Rudin 引用:Ban, Gah-Yi and Cynthia Rudin. The big data newsvendor: Practical insights from machine learning. Operations Research 67.1 (2019): 90-108. 文章链接:https…

从电子表格到纸张:Excel转PDF的神奇变身之旅!

当你需要将Excel文件转换为PDF时,可以使用Python编程语言和一些流行的库来实现这个任务。在本篇博客中,我将介绍如何使用wxPython、pandas和PyMuPDF库创建一个简单易用的图形用户界面(GUI)工具来完成这项工作。 C:\pythoncode\new\excelexportpdf.py …

WebRTC音视频通话-iOS端调用ossrs直播拉流

WebRTC音视频通话-iOS端调用ossrs直播拉流 之前实现iOS端调用ossrs服务,文中提到了推流。没有写拉流流程,所以会用到文中的WebRTCClient。请详细查看:https://blog.csdn.net/gloryFlow/article/details/132257196 一、iOS播放端拉流效果 二…

三角函数与圆,角度和弧度 (草稿,建设中)

目录 1 三角函数与圆,角度和弧度 1.1 三角形 1.2 圆形 2 角度 3 弧度 rad 4 角度,弧度的换算 2 三角函数 1 三角函数与圆,角度和弧度 1.1 三角形 角度弧长sin()cos()tan() 1.2 圆形 半径,周长,弧长半径面积 …

使用kubeadm安装和设置Kubernetes(k8s)

用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署&#xff1a; # 创建一个 Master 节点 kubeadm init# 将一个 Node 节点加入到当前集群中 kubeadm join <Master节点的IP和端口…

OSCS开源安全周报第 56 期:Apache Airflow Spark Provider 任意文件读取漏洞

本周安全态势综述 OSCS 社区共收录安全漏洞 3 个&#xff0c;公开漏洞值得关注的是 Apache NiFi 连接 URL 验证绕过漏洞(CVE-2023-40037)、PowerJob 未授权访问漏洞(CVE-2023-36106)、Apache Airflow Spark Provider 任意文件读取漏洞(CVE-2023-40272)。 针对 NPM 、PyPI 仓库…

【已解决】Please install Node.js and npm before continuing installation.

给juopyter lab安装插件时报这个错 原因是&#xff0c;conda本身有nodejs&#xff0c;但是版本很低&#xff0c;只有0.几 所以需要卸载掉原来的nodejs&#xff0c;重新安装10版本以上的nodejs # 卸载命令 pip uninstall nodejs # 安装命令 conda install nodejs14.7.0 -c cond…

【BASH】回顾与知识点梳理(三十八)

【BASH】回顾与知识点梳理 三十八 三十八. 源码概念及简单编译38.1 开放源码的软件安装与升级简介什么是开放源码、编译程序与可执行文件什么是函式库什么是 make 与 configure什么是 Tarball 的软件如何安装与升级软件 38.2 使用传统程序语言进行编译的简单范例单一程序&#…

使用VisualStudio制作上位机(一)

文章目录 使用VisualStudio制作上位机(一)写在前面第一部分:创建应用程序第二部分:GUI主界面设计使用VisualStudio制作上位机(一) Author:YAL 写在前面 1.达到什么目的呢 本文主要讲怎么通过Visual Studio 制作上位机,全文会以制作过程来介绍怎么做,不会去讲解具体…

(三)行为模式:2、命令模式(Command Pattern)(C++示例)

目录 1、命令模式&#xff08;Command Pattern&#xff09;含义 2、命令模式的UML图学习 3、命令模式的应用场景 4、命令模式的优缺点 5、C实现命令模式的实例 1、命令模式&#xff08;Command Pattern&#xff09;含义 命令模式&#xff08;Command&#xff09;&#xff…

第 359 场 LeetCode 周赛题解

A 判别首字母缩略词 签到题… class Solution { public:bool isAcronym(vector<string> &words, string s) {string pf;for (auto &s: words)pf.push_back(s[0]);return pf s;} };B k-avoiding 数组的最小总和 贪心&#xff1a;从 1 1 1开始升序枚举&#xff0c…

C++实现字符串的逆置

目录 C和C的区别 【1】C对C的扩充 【2】C对C的兼容 第一个C程序 【1】hello world 【2】cout标准输出流对象 i&#xff09;介绍 ii&#xff09;运算 iii&#xff09;cout的使用 iv&#xff09;使用cout指定格式的输出 练习&#xff1a;1、输出斐波那契的前10项。 【3】…

物联网(IoT)安全挑战与解决方案: 分析物联网设备面临的安全威胁,以及如何设计和管理安全的IoT生态系统

第一章&#xff1a;引言 随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;作为连接世界的桥梁&#xff0c;已经成为现代社会不可或缺的一部分。然而&#xff0c;随着IoT设备数量的不断增加&#xff0c;其安全问题也日益显著。本文将深入探讨IoT领域面临的安全…

Docker的基本使用

Docker 概念 Docker架构 docker分为客户端&#xff0c;Docker服务端&#xff0c;仓库 客户端 Docker 是一个客户端-服务器&#xff08;C/S&#xff09;架构程序。Docker 客户端只需要向 Docker 服务端发起请求&#xff0c;服务端将完成所有的工作并返回相应结果。 Docker …

自动化测试工具Selenium的语法续.

OK&#xff0c;那么上篇博客我们介绍了如何搭建基于Javaselenium的环境&#xff0c;并且使用selenium的一些语法给大家演示了如何进行自动化测试的案例&#xff0c;那么本篇博客我们来继续学习selenium的一些其他的比较重要的语法&#xff0c;感谢关注&#xff0c;期待三连~ 目…

系统架构合理性的思考 | 京东云技术团队

最近牵头在梳理部门的系统架构合理性&#xff0c;开始工作之前&#xff0c;我首先想到的是如何定义架构合理性&#xff1f; 从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。 基于以上的定义可以从以下三个方面来梳理评估&#xff1…

IPv4,IPv6,TCP,路由

主要回顾一下TCP&#xff0f;IP的传输过程&#xff0c;在这个过程中&#xff0c;做了什么事情 ip : 网际协议,IP协议能让世界上任意两台计算机之间进行通信。 IP协议的三大功能&#xff1a; 寻址和路由传递服务&#xff1a;不可靠&#xff08;尽最大努力交付传输数据包&…

变动的Python爬虫实现

在电商时代&#xff0c;了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例&#xff0c;您将能够轻松监控商品价格&#xff0c;并及时做出决策。 一、了解需求和目标 在…

EasyCode代码生成MybatisPlus

先安装插件 导入 { "author" : "wangyujie", "version" : "1.2.8", "userSecure" : "", "currTypeMapperGroupName" : "Default", "currTemplateGroupName" : "01-Mybatis-Pl…