OpenCV:特征检测总结

目录

一、什么是特征检测?

二、OpenCV 中的常见特征检测方法

1. Harris 角点检测

2. Shi-Tomasi 角点检测

3. Canny 边缘检测

4. SIFT(尺度不变特征变换)

5. ORB

三、特征检测的应用场景

1. 图像匹配

2. 运动检测

3. 自动驾驶

4. 生物特征识别

四、总结


一、什么是特征检测?

特征检测是计算机视觉中的重要技术,用于识别图像中的关键点(如角点、边缘、纹理等),帮助计算机理解和分析图像内容。特征检测的核心目标是找到能够 稳定、独特、可区分 的图像区域,以便在后续的目标识别、图像匹配、运动估计等任务中使用。

特征检测的基本类型:

  1. 角点检测:检测图像中的拐角点,例如 Harris 角点、Shi-Tomasi 角点。
  2. 边缘检测:检测图像中强度变化明显的边界,例如 Canny 边缘检测。
  3. 局部特征点检测:提取关键点及其描述符,例如 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 边缘检测 主要用于提取图像中的 边缘特征,是计算机视觉中的重要工具。

核心步骤:

  1. 高斯模糊去噪。
  2. 计算梯度,检测边缘。
  3. 通过非极大值抑制减少边缘宽度。
  4. 通过双阈值去除弱边缘。

示例代码:

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提供的特征检测工具,我们可以在图像处理、目标识别、运动检测等多个领域实现高效的视觉分析。希望本篇博文能有所帮助!

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

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

相关文章

Docker安装pypiserver私服

Docker安装pypiserver私服 1 简介 Python开源包管理工具有pypiserver、devpi和Nexus等,pypiserver安装部署比较简单,性能也不错。 搭建pypiserver私服,可以自己构建镜像,也可以使用官网的docker镜像。 # Github地址 https://g…

什么是自动化测试?自动化测试的作用

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、自动化测试 所谓的自动化测试简单来说就是有计算机代替 人来单击被测软件的界面,执行一系列操作并进行验证。 自动化有点:通过执行…

AI驱动的智能流程自动化是什么

在当今快速发展的数字化时代,企业正在寻找更高效、更智能的方式来管理日常运营和复杂任务。其中,“AI驱动的智能流程自动化”(Intelligent Process Automation, IPA)成为了一个热门趋势。通过结合人工智能(AI&#xff…

集合类不安全问题

ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常 解决办法: 1.使用Vector(ArrayList所有方法加synchronized,太重) 2.使用Collections.synchronized…

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片) windows部署ollama Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 下载ollama 下载地址(m…

Verilog代码实例

Verilog语言学习! 文章目录 目录 文章目录 前言 一、基本逻辑门代码设计和仿真 1.1 反相器 1.2 与非门 1.3 四位与非门 二、组合逻辑代码设计和仿真 2.1 二选一逻辑 2.2 case语句实现多路选择逻辑 2.3 补码转换 2.4 7段数码管译码器 三、时序逻辑代码设计和仿真 3.1…

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…

BFS算法——广度优先搜索,探索未知的旅程(下)

文章目录 前言一. N叉树的层序遍历1.1 题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二. 二叉树的锯齿形层序遍历2.1 题目链接:htt…

软件系统性能测试的重要性和测试类型分享

在现代软件开发领域,软件系统性能测试的重要性愈发凸显。软件系统性能测试是一种评估软件应用程序在特定工作负载下的响应时间、稳定性和资源消耗的测试过程。其目标是识别性能瓶颈,确保软件在不同的负载条件下依然能够高效运行。 一、软件系统性能测试…

Three.js 实现海面效果

Three.js 实现海面效果 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idoceanShader import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { Water } from three/examples/js…

C++----继承

一、继承的基本概念 本质:代码复用类关系建模(是多态的基础) class Person { /*...*/ }; class Student : public Person { /*...*/ }; // public继承 派生类继承基类成员(数据方法),可以通过监视窗口检…

【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 基本使用 1.3.1 MySQL安装 1.3.2 连接服务器 1.3.3 服务器…

深度学习:解码智能的“数字炼金术”

深度学习:解码智能的“数字炼金术” 1943年,当神经科学家沃伦麦卡洛克和数学家沃尔特皮茨在论文中首次提出人工神经元模型时,他们或许没有想到,这个简单的数学公式会在80年后掀起改变人类文明的技术革命。深度学习作为这场革命的…

无人机方位感知器官磁力传感器!

一、磁力计传感器的运作方式 基本原理: 磁力计传感器的工作原理基于磁场感应定律。当无人机处于地球磁场中时,磁力计可以测量地磁场的强度和方向。 磁力计通常采用三个互相垂直的磁阻传感器,每个轴向上的传感器检测在该方向上的地磁场强度…

基于SpringBoot养老院平台系统功能实现五

一、前言介绍: 1.1 项目摘要 随着全球人口老龄化的不断加剧,养老服务需求日益增长。特别是在中国,随着经济的快速发展和人民生活水平的提高,老年人口数量不断增加,对养老服务的质量和效率提出了更高的要求。传统的养…

2.7作业

手动将登录项目实现 //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtTextToSpeech/QTextToSpeech> #include <QPushButton> #include <QLabel> #include <QDebug> #include <QMovie> #include <QLineEd…

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

深度学习 Pytorch 神经网络的学习

本节将从梯度下降法向外拓展&#xff0c;介绍更常用的优化算法&#xff0c;实现神经网络的学习和迭代。在本节课结束将完整实现一个神经网络训练的全流程。 对于像神经网络这样的复杂模型&#xff0c;可能会有数百个 w w w的存在&#xff0c;同时如果我们使用的是像交叉熵这样…

vue项目如何设置默认页面

j​​​​​​​​​​​​​​​​​​​​​​​​​​​​创建一个新的vue项目并且将初始页面还原到空白项目开始 - 现实里的乌托邦 - 博客园 vue项目如何设置默认页面 • Worktile社区 创建一个vue项目并配置默认页面_vue如何设置初始展示的页面-CSDN博客 新建的vue项目…

DFX(Design for eXcellence)架构设计全解析:理论、实战、案例与面试指南*

一、什么是 DFX &#xff1f;为什么重要&#xff1f; DFX&#xff08;Design for eXcellence&#xff0c;卓越设计&#xff09;是一种面向产品全生命周期的设计理念&#xff0c;旨在确保产品在设计阶段就具备**良好的制造性&#xff08;DFM&#xff09;、可测试性&#xff08;…