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

news/2024/12/29 23:01:51/

目录

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.ppmy.cn/news/1130627.html

相关文章

C++中使用解除引用运算符访问指向的数据

C中使用解除引用运算符访问指向的数据 有了包含合法地址的指针后,如何访问这个地方,即如何获取或设置这个地方的数据呢?答案是使用解除引用运算符( *)。基本上,如果有合法的指针 pData,要访问它…

图论27(Leetcode721账户合并)

代码&#xff1a; 写了一个超时版本 又学了并查集 超时版本&#xff1a; class Solution {public List<List<String>> accountsMerge(List<List<String>> accounts) {List<List<String>> newAcc new ArrayList<>();Set<Integ…

iOS应用程序的签名、重签名和安装测试

目录 前言 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 前言 ipa编译出来后&#xff0c;或者ipa进行修改后&#xff0c;需要进行重新签名才能安装到测试手机&#xff0c;或者提交app store供apple 商店审核上架。ipaguard有签名和重签名功能&…

Linux Ubuntu配置Git的方法

本文介绍在Linux操作系统的Ubuntu版本中&#xff0c;配置分布式开源版本控制系统Git&#xff0c;随后基于Git克隆GitHub中项目的代码的详细方法。 在之前的文章分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法&#xff08;https://blog.csdn.net/zhebushib…

什么是用户画像?

(1&#xff09;首先用户画像是个动词逻辑&#xff0c;不是名词&#xff0c;就是给用户绘制肖像。 (2&#xff09;在互联网这个平台上&#xff0c;绘制肖像就相当千给用户打标签 (3&#xff09;标签通常是人为规定的高度精炼的特征标识&#xff0c;如年龄、性别、地域、兴趣等…

golang时间问题汇总(用法常见问题:插入数据库时间自动+8)

golang时间问题汇总&#xff08;用法&常见问题&#xff09; 1 用法 1.1 time.Parse() func main() {timeStr : "2023-09-26 20:56:23"allDate, _ : time.Parse("2006-01-02 15:04:05", timeStr)fmt.Println("全部解析", allDate) timeStr…

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…

Arduino PLC IDE

Arduino PLC IDE MCU单片机进入全新的PLC领域概述需要的硬件和软件下一步操作1. Arduino PLC IDE Tool Setup2. Arduino PLC IDE Setup3. Project Setup4. Download the Runtime5. Connect to the Device6. License Activation with Product Key (Portenta Machine Control) 结…