通俗易懂-OpenCV角点检测算法(Harris、Shi-Tomas算法实现)

目录

1 图像的特征

2,Harris角点检测

2.1  代码实现

2.2结果展示

3,Shi-Tomasi角点检测算法

3.1 , 代码实现

3.2结果展示


1 图像的特征

2,Harris角点检测

2.1  代码实现

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']img = cv.imread("corner.png")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)#角点检测
#输入图像必须是float32
gray = np.float32(gray)#最后一个参数在0.04-0.05之间
dst = cv.cornerHarris(gray , 2,3,0.04)  #dst变量是一个和输入灰度图像大小相同的浮点类型的矩阵,其中每个像素的值表示该像素是否是角点的概率。
'''gray:输入的灰度图像。
2:表示Sobel算子内核的大小,用于计算角点响应函数的导数。通常使用的是3x3或5x5的内核大小。
3:表示邻域窗口的大小,用于计算角点响应函数的响应值。对于每个像素点,计算其与周围像素之间的差异。
0.04:表示角点响应函数的自由参数k。k的值较小将使检测到的角点更加敏感,而k的值较大则会减少角点数量。'''#设置阈值,将角点绘制出来,阈值根据图像进行选择
img[dst >0.001*dst.max()] = [0,0,255]
'''它会将图像 img 中响应值大于 0.001 * dst.max() 的像素点设为 [0, 0, 255],即红色。请注意,dst.max() 表示检测到的角点响应函数的最大值。
通过乘以 0.001 ,可以设置一个相对较小的阈值,以便只有极具代表性的角点被标记为红色。你可以根据需要调整阈值大小'''
#图像显示
plt.figure(figsize=(5,4),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title("Harris角点检测")
plt.xticks([]),plt.yticks([])
plt.show()

2.2结果展示

3,Shi-Tomasi角点检测算法

3.1 , 代码实现

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
from pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']img = cv.imread("corner.png")
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)#角点检测
corners = cv.goodFeaturesToTrack(gray , 1000,0.1,10)
'''
gray:输入的灰度图像。
1000:表示要检测的角点数量。这里设置为1000,表示最多检测1000个角点,但实际检测到的角点数量可能会少于这个值。
0.01:表示角点质量水平阈值,用于筛选保留哪些角点。较大的阈值会筛选出更强的角点。
10:表示角点之间的最小欧氏距离。如果两个角点之间的距离小于这个值,其中一个角点将被抑制。
'''
#绘制角点
for i in corners:x,y = i.ravel()cv.circle(img,(x,y),2,(0,0,255),-1)
#图像显示
plt.figure(figsize=(5,4),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title("shi-Tomas角点检测")
plt.xticks([]),plt.yticks([])
plt.show()

3.2结果展示

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

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

相关文章

QFrame类学习笔记

1、QFrame的作用 QFrame类继承于QWidget类,被QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget, and QToolBox等类继承。 QFrame作为许多基础控件的基类,提供许多成员方法给子类,实现子类的框架样式的设计。框架样式主要…

基于微信小程序的健身小助手打卡预约教学系统(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:用户的功能设计为:管理员的功能设计为:健身房的功能设计为:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获…

【数据结构】插入排序:直接插入排序、折半插入排序、希尔排序的学习知识总结

目录 1、排序的基本概念 2、直接插入排序 2.1 算法思想 2.2 代码实现 3、折半插入排序 3.1 算法思想 3.2 代码实现 4、希尔排序 4.1 算法思想 4..2 代码实现 1、排序的基本概念 排序是将一组数据按照预定的顺序排列的过程,排序的基本概念包括以下内容…

electron快速入门

新建electronstu01文件夹 以管理员身份运行powershell,切换到该文件下 npm init -y安装依赖包 npm install --save-dev electron失败 npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm install --save-dev electron修改 package.json &qu…

正则表达式的应用(前端写法)

文章目录 1、匹配字符串中,a标签的href值2、校验邮箱3、校验手机号码3、待添加... 1、匹配字符串中,a标签的href值 (1) 代码 /*** description 匹配字符串中,a标签的href值* param {string} str 匹配的字符串* return {Array} 返回href值*/…

冒泡排序与选择排序(最low的两兄弟)

个人主页:Lei宝啊 愿所有美好如期而遇 前言: 在我们的生活中,无处不在用到排序,比如说成绩的排名,淘宝,京东等等商品在各个方面的排序,这样看来一个好的算 法很重要,接下来我们要先…

JVM对象创建与内存分配机制

对象的创建 对象创建的主要流程: ​ 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应…

Lua学习笔记:debug.sethook函数

前言 本篇在讲什么 使用Lua的debug.setHook函数 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级标题 &…

【AI视野·今日NLP 自然语言处理论文速览 第三十八期】Thu, 21 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 21 Sep 2023 Totally 57 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Chain-of-Verification Reduces Hallucination in Large Language Models Authors Shehzaad Dhuliawala, Mojt…

华为杯数学建模比赛经验分享

再过一周左右,第二十届华为杯数学建模比赛就要开赛了,所以今天分享一下个人数学建模比赛的经验。 今天给大家分享一期关于华为杯数学建模比赛的经验分享,我将从以下三个方面展开说明: (1)如何准备数学建模比赛&#x…

系统集成|第十七章(笔记)

目录 第十七章 变更管理17.1 项目变更的基本概念17.2 变更管理的基本原则17.3 角色职位与工作程序17.4 相关事宜 上篇:第十六章、信息(文档)和配置管理 下篇:第十八章、安全管理 第十七章 变更管理 17.1 项目变更的基本概念 变更…

获取热门电影算法

功能#2:获取热门电影 为我们的“Netflix”项目实现“获取热门电影”功能。 我们将介绍以下内容 描述 解决方案 复杂性措施 时间复杂度 空间复杂度 描述# 现在,我们需要建立一个标准,以便将来自多个国家的顶级电影组合成一个单一的顶级电影…

24. 图论 - 图的表示种类

Hi,你好。我是茶桁。 之前的一节课中,我们了解了图的来由和构成,简单的理解了一下图的一些相关概念。那么这节课,我们要了解一下图的表示,种类。相应的,我们中间需要穿插一些新的知识点用于更好的去理解图,比如说邻接矩阵。 图的表示 我们一般用什么样的形式来表示图…

Linux su sudo命令

1、su命令——切换用户 1.1、切换到root用户(需要密码) su - root 1.2、切换到其他用户,比如jackma(无需密码) su - jackma 2、sudo命令——给普通用户添加root权限 2.1、用法 切换到root用户,执行visudo命令,会自动…

配置pytorchGPU虚拟环境-python3.7

cuda版本的pytorch包下载地址戳这里 winR->输入cmd->输nvcc -V回车 cuda 11.0 输入以下命令来查找 CUDA 的安装路径: Windows: where nvcc 输入以下命令来查找 cuDNN 的版本号: Windows: where cudnn* cuDNN 8.0 本机安装的是cuda 11.0&…

C语言数组和指针笔试题(三)(一定要看)

目录 字符数组四例题1例题2例题3例题4例题5例题6例题7 结果字符数组五例题1例题2例题3例题4例题5例题6例题7结果字符数组六例题1例题2例题3例题4例题5例题6例题7 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个…

第二证券:迎政策助力,新型工业化爆发,德恩精工3日涨超60%

新式工业化概念26日盘中大幅拉升,到发稿,德恩精工、精伦电子、天永智能等涨停,固高科技涨约8%,亚威股份涨逾6%,金自天正、创世纪涨约5%。 值得注意的是,精伦电子已接连5个交易日涨停,公司昨日晚…

2023-09-21 buildroot linux 查看应用的log打印信息,命令cat /var/log/messages

一、应用会调用syslog 把打印信息输出到串口,debug 串口会打印kernel的log和上层应用的的log。 二、linux 命令cat /var/log/messages查看应用log

Spire.OCR for .NET 1.9.0 Crack

Spire.OCR for .NET 是一个专业的 OCR 库,用于从 JPG、PNG、GIF、BMP 和 TIFF 格式的图像中读取文本。开发人员可以轻松地在 C# 和 VB.NET 的 .NET 应用程序中添加 OCR 功能。它支持常用的图像格式,并提供从图像中​​读取多个字符和字体、粗体和斜体样式…

如何给Nginx配置访问IP白名单

一、Nginx配置访问IP白名单 有时部署的应用需要只允许某些特定的IP能够访问,其他IP不允许访问,这时,就要设置访问白名单; 设置访问白名单有多种方式: 1.通过网络防火墙配置,例如阿里云/华为云管理平台 2.…