OpenCV:特征检测总结
目录
一、什么是特征检测?
二、OpenCV 中的常见特征检测方法
1. Harris 角点检测
2. Shi-Tomasi 角点检测
3. Canny 边缘检测
4. SIFT(尺度不变特征变换)
5. ORB
三、特征检测的应用场景
1. 图像匹配
2. 运动检测
3. 自动驾驶
4. 生物特征识别
四、总结
一、什么是特征检测?
特征检测是计算机视觉中的重要技术,用于识别图像中的关键点(如角点、边缘、纹理等),帮助计算机理解和分析图像内容。特征检测的核心目标是找到能够 稳定、独特、可区分 的图像区域,以便在后续的目标识别、图像匹配、运动估计等任务中使用。
特征检测的基本类型:
- 角点检测:检测图像中的拐角点,例如 Harris 角点、Shi-Tomasi 角点。
- 边缘检测:检测图像中强度变化明显的边界,例如 Canny 边缘检测。
- 局部特征点检测:提取关键点及其描述符,例如 SIFT、SURF、ORB、FAST。
二、OpenCV 中的常见特征检测方法
OpenCV 提供了多种特征检测算法,可以根据应用场景选择适合的方法。
1. Harris 角点检测
Harris 角点检测是一种用于检测角点的方法。角点是指图像中灰度变化较大的点,它们通常对应于结构的交点,如建筑物的拐角。
核心思想:
- 计算图像窗口在不同方向上的灰度变化。
- 若在所有方向上灰度变化较大,则认为该点是角点。
示例代码:
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 计算 Harris 角点
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)# 角点增强
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]# 显示结果
cv2.imshow('Harris Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
▶️运行结果:

应用场景:
- 目标跟踪
- 运动检测
- 物体识别
2. Shi-Tomasi 角点检测
Shi-Tomasi 角点检测是 Harris 角点的改进版本,能够更好地选择稳定的角点。
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 计算 Harris 角点
#harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)# 角点增强
#image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
for corner in np.int0(corners):x, y = corner.ravel()cv2.circle(image, (x, y), 5, (0, 255, 0), -1)# 显示结果
cv2.imshow('Shi-Tomasi', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
▶️运行结果:

应用场景:
- 运动跟踪(如光流跟踪)
- 结构分析
3. Canny 边缘检测
Canny 边缘检测 主要用于提取图像中的 边缘特征,是计算机视觉中的重要工具。
核心步骤:
- 高斯模糊去噪。
- 计算梯度,检测边缘。
- 通过非极大值抑制减少边缘宽度。
- 通过双阈值去除弱边缘。
示例代码:
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)edges = cv2.Canny(gray, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
▶️运行结果:
应用场景:
- 车道检测
- 物体轮廓提取
- OCR(光学字符识别)
4. SIFT(尺度不变特征变换)
SIFT (Scale-Invariant Feature Transform) 是一种经典的特征检测方法,具有 尺度不变性 和 旋转不变性,能够检测图像中的局部特征点,并为每个特征点生成独特的描述符。
示例代码:
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)sift = cv2.SIFT_create()
keypoints, descriptors = sift.detectAndCompute(gray, None)
image_sift = cv2.drawKeypoints(image, keypoints, None)
cv2.imshow('SIFT Features', image_sift)
cv2.waitKey(0)
cv2.destroyAllWindows()
▶️运行结果:

应用场景:
- 图像匹配(如拼接全景图)
- 物体识别
- 机器人导航
5. ORB
ORB (Oriented FAST and Rotated BRIEF)是 SIFT 和 SURF 的高效替代方案,适用于实时应用,如移动设备上的特征检测。
示例代码:
import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\filter\\shudu.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)orb = cv2.ORB_create()
keypoints = orb.detect(gray, None)
image_orb = cv2.drawKeypoints(image, keypoints, None)
cv2.imshow('ORB Features', image_orb)
cv2.waitKey(0)
cv2.destroyAllWindows()
▶️运行结果:
应用场景:
- 低计算资源环境(如嵌入式设备)
- 物体跟踪
- 视觉 SLAM(同时定位与地图构建)
三、特征检测的应用场景
1. 图像匹配
- 通过特征点匹配来识别物体,如 SIFT、ORB 可用于 拼接全景图 或 目标识别。
2. 运动检测
- 角点检测(如 Shi-Tomasi)可用于跟踪视频中的运动物体,如 光流跟踪。
3. 自动驾驶
- Canny 边缘检测 可用于 车道检测,ORB 可用于 视觉 SLAM。
4. 生物特征识别
- SIFT、ORB 可用于 指纹识别、人脸识别。
四、总结
| 方法 | 主要用途 | 特点 |
|---|---|---|
| Harris 角点 | 角点检测 | 计算简单,适用于运动检测 |
| Shi-Tomasi 角点 | 改进的角点检测 | 适用于光流跟踪等任务 |
| Canny 边缘 | 边缘检测 | 精确提取物体轮廓 |
| SIFT | 关键点检测、图像匹配 | 尺度、旋转不变,精度高 |
| ORB | 关键点检测、实时匹配 | 适合移动端,速度快 |
如何选择特征检测方法?
- 如果需要快速检测角点:Shi-Tomasi、Harris。
- 如果需要检测物体轮廓:Canny。
- 如果需要进行图像匹配:SIFT、ORB。
- 如果需要在低计算资源环境下运行:ORB 是更好的选择。
😀通过OpenCV提供的特征检测工具,我们可以在图像处理、目标识别、运动检测等多个领域实现高效的视觉分析。希望本篇博文能有所帮助!
相关文章:
OpenCV:特征检测总结
目录 一、什么是特征检测? 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT(尺度不变特征变换) 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…...
标志的推理
下面的讨论是我对《对编程实现拟人智能可行性的论证》这篇文章的“赋值与对象的标志”这一节的展开讨论。 标志能够使我们更好的思维(比如用轮廓标记物体对象,用兴奋强度标记回忆情况等等)。有思维标志、信息标志,单纯标志、组合…...
python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
【1】引言 前序学习过程中,已经掌握了对图像的基本滤波操作技巧,具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波,相关文章链接有: python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素…...
【SQL技术】不同数据库引擎 SQL 优化方案剖析
一、引言 在数据处理和分析的世界里,SQL 是不可或缺的工具。不同的数据库系统,如 MySQL、PostgreSQL(PG)、Doris 和 Hive,在架构和性能特点上存在差异,因此针对它们的 SQL 优化策略也各有不同。这些数据库中…...
链式结构二叉树(递归暴力美学)
文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法: 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现,可以知道其底层结构…...
使用类别数据编码进行连续变量的特征提取
在数据科学和机器学习中,数据预处理是模型构建的重要步骤。对于处理结构化数据时,特别是包含类别型数据的场景,类别数据编码是必不可少的步骤。类别数据通常以文字、标签等形式出现,但大多数机器学习算法只能处理数值型数据,因此需要将类别数据转化为数值格式。编码方式的…...
PCL 最小包围圆(二维)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 最小包围圆是指能够包含给定点集中所有点的最小圆。这个算法通常用于计算几何、计算机图形学、机器学习等领域。以下是该算法的基本原理和实现流程: 1. 初始化:将点集中的所有点加入待处理列表。 2. 查找最远点:…...
技术文档管理最佳实践:高效、专业、可持续
文章目录 技术文档管理最佳实践:高效、专业、可持续1. 技术文档的核心价值1.1 降低知识流失风险1.2 提升开发效率1.3 增强团队协作1.4 规范技术资产管理 2. 技术文档分类与规范2.1 代码相关文档2.2 过程与运维文档2.3 知识与培训文档 3. 工具选型:自动化…...
56. Uboot移植实验
一、NXP官方Uboot编译与测试 1、将NXP提供的uboot拷贝到ubuntu中。 一个开发板也好运行uboot,DDR或者叫DRAM,串口,SD、EMMC、NAND。板子能工作。 测似结果: 1、uboot能正常启动 2、LCD驱动要根据所使用的屏幕修改。 3、NET初始…...
AI大模型:本地部署deepseek
一、安装lmstudio 1、下载网站: LM Studio - Discover, download, and run local LLMs 2、直接安装即可,记住安装的路径 二、下载deepseek模型 2.1、下载的流程 1、下载网站 https://huggingface.co/models 2、在搜索框输入:deepseek …...
(算法竞赛)图论+DFS深搜——图的dfs遍历1
题目描述 给定一个无向图,包含 n 个顶点(编号为 1 到 n)和 e 条边。要求从顶点 1 开始进行深度优先搜索(DFS),并按照访问顺序输出遍历结果。注意:当存在多个邻接点时,优先访问编号较…...
RK3588平台开发系列讲解(DMA篇)DMA engine使用
文章目录 一、DMA 使用步骤二、DMA接口2.1、DMA 通道管理相关接口2.2、DMA 描述符相关接口2.3、DMA 启动与控制接口2.4、DMA 状态检查接口2.5、 DMA 缓存管理接口2.6、DMA 中断与同步机制沉淀、分享、成长,让自己和他人都能有所收获!😄 Linux 内核的 DMA 引擎提供了一组完整…...
报名 | IEEE ICME 2025 音频编码器能力挑战赛正式开启
音频编码器是多模态大模型的重要组件,优秀的音频编码器在构建多模态系统中至关重要。在此背景下,小米集团、萨里大学、海天瑞声共同主办了 IEEE International Conference on Multimedia & Expo (ICME) 2025 Audio Encoder Capability Challenge。 …...
fputs的概念和使用案例
fputs 是 C 语言中用于向文件写入字符串的标准库函数。它与 puts 类似,但不会自动添加换行符,且支持向任意文件流(如磁盘文件、标准输出等)写入数据。 概念解析 函数原型:int fputs(const char *str, FILE *stream); …...
ASP.NET Core标识框架Identity
目录 Authentication与Authorization 标识框架(Identity) Identity框架的使用 初始化 自定义属性 案例一:添加用户、角色 案例二:检查登录用户信息 案例三:实现密码的重置 步骤 Authentication与Authorizatio…...
PFAS(全氟烷基和多氟烷基物质)测试流程详细介绍
PFAS(全氟烷基和多氟烷基物质)测试详细介绍 什么是PFAS? PFAS是(Per-and polyfluoroalkyl substances)的简称,中文名:全氟烷基和多氟烷基物质,是一系列合成有机氟化物的总称,是指至少含有一个…...
宝塔面板端口转发其它端口至MySQL的3306
最近需要把服务器的MySQL服务开放给外网,但又希望公开给所有人。也不想用默认的3306端口。同时也不想改变MySQL的默认端口。 这时候最好的办法就是用一个不常用的端口来转发至3306上去。例如使用49306至3306,外网通过49306来访问,内网依然使用…...
inquirer介绍及配合lerna在Vue中使用示例
目录 安装基本用法使用多个提示框动态选择(动态选项)表单式输入配合lerna在Vue中使用示例 Inquirer 是一个用于创建交互式命令行工具的 Node.js 库,常用于收集用户输入。它提供了多种类型的提示框,可以用于创建交互式应用程序&…...
AI商业化:如何包装技术并找到客户需求?
AI商业化:如何包装技术并找到客户需求? 适用人群:对人工智能技术有一定沉淀,正在探索技术变现和商业模式创新的创业者、技术团队以及企业管理者。同时也适合对 AI 产品包装、市场调研与用户调研感兴趣的从业人员。 一、引言 在过去几年里,从 GPT、Transformer 到 DeepSee…...
基于MODIS/Landsat/Sentinel/国产卫星遥感数据与DSSAT作物模型同化的作物产量估算
基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及产量预测、栽培管理、环境评价以及未来气候变化评估等提供了…...
OpenAI 宣布免费开放 ChatGPT 搜索,无需注册
在科技飞速发展的今天,人工智能领域的每一次突破都犹如一颗重磅炸弹,震撼着整个世界。北京时间 2025 年 2 月 6 日凌晨,OpenAI 宣布向所有用户开放 ChatGPT 搜索功能,且无需注册,这一消息瞬间引发了全球范围内的广泛关…...
如何打开vscode系统用户全局配置的settings.json
📌 settings.json 的作用 settings.json 是 Visual Studio Code(VS Code) 的用户配置文件,它存储了 编辑器的个性化设置,包括界面布局、代码格式化、扩展插件、快捷键等,是用户全局配置(影响所有…...
DeepSeek-V3本地Docker容器化部署
1. 安装Docker 确保已安装Docker Desktop for Mac: 下载并安装 Docker Desktop。 安装完成后,启动Docker Desktop。 验证安装: docker --version docker-compose --version 2. 克隆DeepSeek-V3仓库 git clone https://github.com/deeps…...
【Leetcode 每日一题】47. 全排列 II
问题背景 给定一个可包含重复数字的序列 n u m s nums nums,按任意顺序 返回所有不重复的全排列。 数据约束 1 ≤ n u m s . l e n g t h ≤ 8 1 \le nums.length \le 8 1≤nums.length≤8 − 10 ≤ n u m s [ i ] ≤ 10 -10 \le nums[i] \le 10 −10≤nums[i]≤…...
【Uniapp-Vue3】从uniCloud中获取数据
需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…...
【重生之学习C语言----杨辉三角篇】
目录 编辑 --------------------------------------begin---------------------------------------- 一、什么是杨辉三角? 二、问题分析 三、算法设计 使用二维数组存储杨辉三角: 递推关系: 格式化输出: 四、代码实现 完…...
天童教育:帮助孩子建立稳定的自信心
不少家长发现,自己家孩子不知道从什么时候开始,不再自信了。有些孩子在面对挑战时总是畏缩不前,不敢尝试新事物;在众人面前发言时,声音微弱,眼神闪躲。昆明天童教育认为,这些表现往往是孩子自信…...
LabVIEW自定义测量参数怎么设置?
以下通过一个温度采集案例,说明在 LabVIEW 中设置自定义测量参数的具体方法: 案例背景 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度,需自定义以下参数: 采样率:1 kHz 输入量程:0~10 V&a…...
Vim的基础命令
移动光标 H(左) J(上) K(下) L(右) $ 表示移动到光标所在行的行尾, ^ 表示移动到光标所在行的行首的第一个非空白字符。 0 表示移动到光标所在行的行首。 W 光标向前跳转一个单词 w光标向前跳转一个单词 B光标向后跳转一个单词 b光标向后跳转一个单词 G 移动光标到…...
SpringCloud详细讲解
学习目标 微服务框架SpringCloud的核心组件分布式与集群Spring Cloud 优缺点 微服务框架 微服务框架是将某个应用程序开发划分为多个小型服务独立进行业务开发的一种架构模式。以下是对微服务框架的详细介绍: 一、定义与特点 定义:微服务框架围绕业务…...
