当前位置: 首页 > news >正文

OpenCV 图像边缘检测

目录

一、准备工作

二、Sobel 算子

1.Sobel 算子的使用方法

2.关键参数说明

三、Scharr 算子

1.Scharr 算子的使用方法

四、Laplacian 算子

1.Laplacian 算子的使用方法

2.cv2.Laplacian()函数参数说明:

五、Canny 边缘检测

1.Canny 边缘检测的使用方法

2.cv2.Canny()函数关键参数:

六、四种算子的对比分析


边缘检测是计算机视觉中的基础任务,它通过识别图像中灰度变化剧烈的区域来提取物体轮廓。本文将介绍 OpenCV 中四种常用的边缘检测算子:Sobel、Scharr、Laplacian 和 Canny,并通过实战代码展示它们的使用方法和效果差异。


一、准备工作

在开始之前,我们需要导入必要的库:

import cv2
import numpy as np

本文将使用一张老虎图像(tiger.jpg)作为示例,所有算子都将基于这张图像进行边缘检测实验。


二、Sobel 算子

Sobel 算子是一种常用的边缘检测算子,它通过计算图像在 x 和 y 方向的梯度来检测边缘。其原理是使用两个 3x3 的卷积核分别对图像进行卷积运算,得到 x 和 y 方向的边缘信息。

1.Sobel 算子的使用方法

# 以灰度模式读取图像
tiger = cv2.imread('tiger.jpg', 0)# Sobel计算x方向梯度,使用float64保存负数信息
tiger_x_64 = cv2.Sobel(tiger, cv2.CV_64F, dx=1, dy=0)
# 转换为绝对值,使负数边缘可见
tiger_x_full = cv2.convertScaleAbs(tiger_x_64)# Sobel计算y方向梯度
tiger_y_64 = cv2.Sobel(tiger, cv2.CV_64F, dx=0, dy=1)
tiger_y_full = cv2.convertScaleAbs(tiger_y_64)# 融合x、y方向梯度结果
tiger_xy_sobel_full = cv2.addWeighted(tiger_x_full, 1, tiger_y_full, 1, 0)# 显示结果
cv2.imshow('tiger_xy_sobel_full', tiger_xy_sobel_full)
cv2.waitKey(0)

2.关键参数说明

  • cv2.Sobel(src, ddepth, dx, dy):Sobel 算子的核心函数

    • src:输入图像
    • ddepth:输出图像深度,使用cv2.CV_64F可以保存负数信息
    • dx:x 方向导数阶数(1 表示计算 x 方向梯度)
    • dy:y 方向导数阶数(1 表示计算 y 方向梯度)
  • cv2.convertScaleAbs():将梯度结果转换为绝对值,确保负数边缘信息可见

  • cv2.addWeighted():加权融合 x 和 y 方向的边缘信息


三、Scharr 算子

Scharr 算子是 Sobel 算子的改进版本,当 Sobel 算子的卷积核大小为 3 时,Scharr 算子可以提供更精确的梯度计算结果。

1.Scharr 算子的使用方法

# 以灰度模式读取图像
tiger = cv2.imread('tiger.jpg', cv2.IMREAD_GRAYSCALE)# Scharr计算x方向梯度
tiger_x_64 = cv2.Scharr(tiger, cv2.CV_64F, dx=1, dy=0)
tiger_x_full = cv2.convertScaleAbs(tiger_x_64)# Scharr计算y方向梯度
tiger_y_64 = cv2.Scharr(tiger, cv2.CV_64F, dx=0, dy=1)
tiger_y_full = cv2.convertScaleAbs(tiger_y_64)# 融合x、y方向梯度结果
tiger_xy_Scharr_full = cv2.addWeighted(tiger_x_full, 1, tiger_y_full, 1, 0)# 显示结果
cv2.imshow('tiger_xy_Scharr_full', tiger_xy_Scharr_full)
cv2.waitKey(0)

Scharr 算子的使用方法与 Sobel 非常相似,只是将cv2.Sobel()替换为cv2.Scharr()。在边缘检测效果上,Scharr 算子通常比 Sobel 算子(3x3 核)更敏锐,能检测到更多细节。


四、Laplacian 算子

Laplacian 算子通过计算图像的二阶导数来检测边缘,它对噪声比较敏感,但能很好地检测出图像中的快速变化区域。

1.Laplacian 算子的使用方法

# 以灰度模式读取图像
tiger = cv2.imread('tiger.jpg', cv2.IMREAD_GRAYSCALE)# Laplacian算子处理
tiger_lap = cv2.Laplacian(tiger, cv2.CV_64F)
# 转换为绝对值
tiger_lap_full = cv2.convertScaleAbs(tiger_lap)# 显示结果
cv2.imshow('tiger_lap_full', tiger_lap_full)
cv2.waitKey(0)

2.cv2.Laplacian()函数参数说明:

  • src:输入图像
  • depth:输出图像深度
  • 可选参数ksize:滤波器孔径大小,必须为正奇数

Laplacian 算子不需要分别计算 x 和 y 方向的梯度,直接得到整体边缘信息,但实际应用中常与高斯模糊结合使用以减少噪声影响。


五、Canny 边缘检测

Canny 边缘检测是一种多阶段的边缘检测算法,具有良好的边缘检测效果和抗噪声能力,是实际应用中最常用的边缘检测方法之一。

1.Canny 边缘检测的使用方法

# 以灰度模式读取图像
tiger = cv2.imread('tiger.jpg', cv2.IMREAD_GRAYSCALE)# 显示原始灰度图像
cv2.imshow('tiger', tiger)
cv2.waitKey(0)# Canny边缘检测,设置阈值
tiger_canny = cv2.Canny(tiger, 150, 230)# 显示结果
cv2.imshow('tiger_canny', tiger_canny)
cv2.waitKey(0)

2.cv2.Canny()函数关键参数:

  • image:输入图像
  • threshold1:低阈值,用于边缘连接
  • threshold2:高阈值,用于检测强边缘

Canny 算法会自动处理梯度计算、非极大值抑制和边缘连接等步骤,通常能得到更清晰、连续的边缘结果。


六、四种算子的对比分析

  • Sobel 算子:计算简单,速度快,对噪声有一定抑制能力,适合实时应用
  • Scharr 算子:比 Sobel 算子(3x3)检测更精确,细节更丰富
  • Laplacian 算子:对边缘响应更强烈,但对噪声敏感,边缘可能较粗
  • Canny 算子:边缘检测效果最佳,边缘连续且定位准确,但计算复杂度较高

在实际应用中,可根据具体需求选择合适的边缘检测算子。对于大多数场景,Canny 边缘检测通常能提供最好的结果;而在实时性要求较高的场景,Sobel 算子可能是更好的选择。

http://www.dtcms.com/a/344294.html

相关文章:

  • 设计模式之装饰模式
  • 技术革新:再互动平台如何以全链路数字化重构防伪溯源生态
  • 泵站远程监控与自动化控制系统:智慧泵房设备的创新实践
  • RLHF的定义
  • 无人机延时模块技术难点解析
  • 数字安全隐形基石:随机数、熵源与DRBG核心解析与技术关联
  • Kubernetes 构建高可用、高性能 Redis 集群
  • 服务器硬件中的磁盘SSD与HDD性能区别,以及分别适用于什么业务?
  • 高性能、高实时、高安全:如何在飞凌嵌入式i.MX95xx核心板上同时实现?
  • C++ 循环:从入门到精通的深度解析
  • KubeBlocks for MSSQL 高可用实现
  • 云原生(Cloud Native)技术概述
  • 企业级大模型解决方案:架构、落地与代码实现​
  • LeetCode 分类刷题:34. 在排序数组中查找元素的第一个和最后一个位置
  • Unreal Engine APawn 与 ACharacter 比较
  • 开发避坑指南(31):Oracle 11g LISTAGG函数使用陷阱,缺失WITHIN子句解决方案
  • 如何优雅统计知识库文件个数与子集下不同文件夹文件个数
  • Vue3源码reactivity响应式篇之Ref
  • Oracle APEX 经典报表中的Checkbox
  • 期货Level2五档订单簿0.25秒级高频分时及日频历史行情数据使用指南
  • Docker 部署 MySQL 8.0 完整指南:从拉取镜像到配置远程访问
  • 高级SQL优化 | 告别 Hive 中 GROUP BY 的大 KEY 数据倾斜!PawSQL 自适应优化算法详解
  • MsSQL 函数,实现数字转换成人民币大写
  • IDEA基础配置优化指南(中英双版)
  • matlab中随机森林算法的实现
  • AI重塑职业教育:个性化学习计划提效率、VR实操模拟强技能,对接就业新路径
  • 在Excel和WPS表格中如何隐藏单元格的公式
  • 视觉语言对比学习的发展史:从CLIP、BLIP、BLIP2、InstructBLIP(含MiniGPT4的详解)
  • 一分钟了解六通道 CAN(FD) 集线器
  • 第二阶段WinFrom-6:文件对话框,对象的本地保存,序列化与反序列化,CSV文件操作,INI文件读写