OpenCV--特征检测

server/2024/12/16 1:55:01/

OpenCV--特征检测

  • 代码和笔记

代码和笔记

import cv2
import numpy as np"""
特征检测和匹配
1. 定义:提取图像信息,决定每个图像的点是否属于一个图像特征。
特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域
2. 包含边缘检测、角检测、区检测和脊检测
3. 应用场景:图像搜索、拼图游戏、图像拼接特征是唯一的、可追踪的、能比较的--角点
角点是图像中的重要特征点,它们包含了丰富的图像信息。通过角点检测,可以从图像中提取出这些特征点,用于后续的图像分析、处理和识别任务。
属于角点的是:图像中灰度梯度变化显著的点,或者是一阶导数(即灰度梯度)的局部最大对应的像素点。两条及两条以上的边缘的交点。
""""""
特征检测
"""
img = cv2.imread('./img/cat.jpeg')# 变成灰度图
gary = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)"""
Harris 角点检测
"""
# blockSize:检测窗口,要小一点,ksize:sobel算法的卷积核,奇数,k:权重系数
# 返回的是角点响应,每一个像素都能算出一个
dst = cv2.cornerHarris(gary, blockSize=2, ksize=3, k=0.04)
# 设定阈值,显示角点 乘以0.01是为了覆盖多的角点,大了不好
img[dst > (0.01 * dst.max())] = [0, 0, 255]cv2.imshow('img1', img)"""
Harris具有旋转不变性,即旋转后角点还是原来的角点,但是缩放后就可能不是了。
SIFT关键点检测:尺寸不变性,
"""
# 创建sift对象 SIFT_create在扩展包里面
# 旧版本在cv2.xfeatures2d.SIFT_create()
sift = cv2.SIFT_create()# 进行检测 kp是一个列表,存放的是封装的KeyPoint对象
kp = sift.detect(gary)# 计算描述子,用于特征匹配。检测和计算可以一起,方法为:detectAndCompute(gary, None),None是掩码操作,None表示整个图片都计算。
# 描述子:是一个刻画特征的数据结构,其维数可以是多维的。
# 它能够描述图像中特定区域的特征,这些特征对图像的旋转、尺度变化、光照变化等具有一定的鲁棒性。
kp, des = sift.compute(gary, kp)
# print(des.shape)
# 绘制关键点, 绘制对象:gary,输出:输出在img上
cv2.drawKeypoints(gary, kp, img)
cv2.imshow('img2', img)"""
Shi-Tomasi角点检测:Harris的改进版,因为Harris的稳定性与k有关,不太好设定
稳定性实质上与矩阵M的较小特征值有关,直接用这个特征值作为分数就不需要调整k了
"""
# shi-tomasi角点检测
# maxCorners:角点最大数,0表示无限制。
# qualityLevel:角点质量,一般在0.01-0.1之间。minDistance:角之间最小的欧氏距离,忽略小于此距离的点。
corners = cv2.goodFeaturesToTrack(gary, maxCorners=0, qualityLevel=0.01, minDistance=10)# 绘制角点,先转化为int,注意corners是三维数组, ravel二维变一维
corners = np.int0(corners)
for i in corners:x, y = i.ravel()# 3为半径,-1表示实心cv2.circle(img, (x, y), 3, (0, 0, 255), -1)cv2.imshow('img3', img)"""
SURF特征检测:稳健,SIFT的改进,提升了效率。注意:只有OpenCV 3.4.1.15以下才能用
用法和SIFT类型,换成SURF_create()就OK
""""""
ORB特征检测:速度快,替代SURF,最大优势:实时检测
"""
# orb对象
orb = cv2.ORB_create()
# 进行检测和计算描述子
kp = orb.detect(gary)
kp, des = orb.compute(img, kp)
print(des)cv2.waitKey(0)
cv2.destroyAllWindows()

http://www.ppmy.cn/server/150502.html

相关文章

SQL实现百分数转小数格式

MySQL 在MySQL中,可以使用CAST()函数将百分数转换为小数点格式。下面是一个示例: SELECT CAST(50% AS DECIMAL(4,2)) / 100;在上面的示例中,CAST(‘50%’ AS DECIMAL(4,2))将字符串’50%转换为DECIMAL类型,并指定小数点位数

XSS(跨站攻击)

XSS漏洞(跨站脚本) 1.XSS 漏洞简介 ​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从…

Vue的渲染机制深度解析

作为一名高级Vue程序员,对Vue的渲染机制有着深入的理解是至关重要的。Vue的渲染机制是其核心特性之一,它涉及到模板解析、虚拟DOM的创建、差异对比以及最终的DOM更新。以下是Vue渲染机制的详细解析。 1. 模板解析与抽象语法树(AST&#xff0…

[WiFi] WiFi安全加密WEP Vs WPA Vs WPA2 Vs WPA3整理

WiFi安全标准时间线 WEP(Wired Equivalent Privacy) WEP最早于1997年推出,是为了保护无线网络上的数据通信而设计的。当时,Wi-Fi技术还处于起步阶段,人们开始意识到需要一种安全协议来防止未经授权的访问和窃听。WEP被…

vuex 作用及五大组成部分

Vuex 是 Vue.js 的官方状态管理库,旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式,并且遵循单一状态树的原则。通过 Vuex,可以更容易地实现状态的可预测性和调试。 一、Vuex…

Blazor(.razor)+VUE+elementUI适合一起用吗

在实际项目中,将 Blazor(.razor) 与 Vue.js 和 ElementUI 一起使用是可以实现的,但是否适合取决于你的项目需求、开发团队的技术栈和具体场景。以下是对这种组合的详细分析: 一、适合一起使用的场景 1.1 逐步引入 Bla…

金融信息分析--python小白入门基础

国内量化交易工具/平台:聚宽joinquant BigQuant 优矿 量化云 万矿WindQuant 米筐RiceQuant Python编写方式:交互式V.S文件式(脚本式) 在开始编写代码前首先要认识Python语言的两种编写方式 交互式:写一段或一行执行一…

R 因子

R 因子 引言 在金融领域,风险管理和投资策略的制定至关重要。其中,R因子作为一种重要的风险调整指标,被广泛应用于投资组合的构建和优化中。本文将深入探讨R因子的概念、计算方法以及其在实际投资中的应用。 R因子的定义 R因子&#xff0…