深度学习之 OpenCV 图像边缘检测算法解析及代码演示

引言

在计算机视觉领域,边缘检测是一种重要的图像预处理技术,用于识别图像中对象的边界。边缘检测有助于提取图像的关键特征,这对于后续的图像分析(如物体识别、运动检测等)至关重要。OpenCV 是一个强大的计算机视觉库,提供了多种边缘检测算法。本文将重点介绍如何使用 OpenCV 进行图像边缘检测,并通过具体的代码示例来展示 Sobel 算子的应用。

Sobel 算子原理

Sobel 算子是一种广泛使用的边缘检测方法,它利用两个 3x3 的卷积核来分别计算图像在水平方向(x 方向)和垂直方向(y 方向)上的梯度。这两个卷积核如下所示:

  • 水平方向(x 方向)梯度核

  • 垂直方向(y 方向)梯度核

通过这两个核对图像进行卷积操作,可以获得图像在各个方向上的梯度信息,进而识别出图像中的边缘。

代码演示
  1. 导入库和读取图像

    1import cv2
    2
    3yuan = cv2.imread('yuan.png')
    4cv2.imshow('原图', yuan)
    5cv2.waitKey(0)

    解释:

    • 导入 cv2 库。
    • 使用 cv2.imread 函数读取名为 yuan.png 的图像文件。
    • 显示原始图像,并等待用户按键继续。
  2. x 方向上的边缘

    1# x方向上的边缘
    2yuan_x = cv2.Sobel(yuan, -1, dx=1, dy=0)
    3cv2.imshow('x方向边缘', yuan_x)
    4cv2.waitKey(0)

    解释:

    • 使用 cv2.Sobel 函数计算 x 方向上的边缘。
    • dx=1 表示在 x 方向上求一阶导数,dy=0 表示在 y 方向上保持不变。
    • 显示 x 方向上的边缘图像,并等待用户按键继续。
  3. x 方向上的边缘(包括负数信息)

    1# x方向上的边缘,包括负数信息(右端),但显示不出来,因为范围是(0~255)
    2yuan_x_64 = cv2.Sobel(yuan, cv2.CV_64F, dx=1, dy=0)  # 默认 uint8 改为 float64,可保存负数
    3cv2.imshow('x方向边缘(浮点型)', yuan_x_64)
    4cv2.waitKey(0)

    解释:

    • 将数据类型改为 cv2.CV_64F 以便保存负数。
    • 显示 x 方向上的边缘图像,但由于数据类型为浮点型,直接显示可能看不到清晰的边缘。
  4. x 方向上的边缘(包括负数信息,取绝对值)

    1# x方向上的边缘,包括负数信息,进行取绝对值的操作,右端的负值信息就可以显示出来了
    2yuan_x_full = cv2.convertScaleAbs(yuan_x_64)  # 转换为绝对值,负数转换为正数
    3cv2.imshow('x方向边缘(绝对值)', yuan_x_full)
    4cv2.waitKey(0)

    解释:

    • 使用 cv2.convertScaleAbs 函数将浮点型数据转换为整数型数据,并取绝对值。
    • 显示 x 方向上的边缘图像,此时可以看到清晰的边缘。
  5. y 方向上的边缘

    1# y方向上的边缘
    2yuan_y = cv2.Sobel(yuan, -1, dx=0, dy=1)
    3cv2.imshow('y方向边缘', yuan_y)
    4cv2.waitKey(0)

    解释:

    • 使用 cv2.Sobel 函数计算 y 方向上的边缘。
    • dx=0 表示在 x 方向上保持不变,dy=1 表示在 y 方向上求一阶导数。
    • 显示 y 方向上的边缘图像,并等待用户按键继续。
  6. y 方向上的边缘(包括负数信息,取绝对值)

    1# y方向上的边缘,包括负数信息(下端),但显示不出来,因为范围是(0~255)
    2yuan_y_64 = cv2.Sobel(yuan, cv2.CV_64F, dx=0, dy=1)  # 默认 int8 改为 float64,可保存负数
    3yuan_y_full = cv2.convertScaleAbs(yuan_y_64)  # 转换为绝对值,负数转换为正数
    4cv2.imshow('y方向边缘(绝对值)', yuan_y_full)
    5cv2.waitKey(0)

    解释:

    • 将数据类型改为 cv2.CV_64F 以便保存负数。
    • 使用 cv2.convertScaleAbs 函数将浮点型数据转换为整数型数据,并取绝对值。
    • 显示 y 方向上的边缘图像,此时可以看到清晰的边缘。
  7. 同时使用 x 和 y 方向的结果

    1# 如果同时使用 x,y 方向的结果如何呢?(不建议使用)
    2yuan_xy = cv2.Sobel(yuan, -1, dx=1, dy=1)
    3cv2.imshow('xy方向边缘', yuan_xy)
    4cv2.waitKey(100000)

    解释:

    • 使用 cv2.Sobel 函数计算 x 和 y 方向上的边缘。
    • dx=1 表示在 x 方向上求一阶导数,dy=1 表示在 y 方向上也求一阶导数。
    • 显示 xy 方向上的边缘图像,并等待用户按键继续。
  8. 使用图像加权运算组合 x 和 y 方向的 2 个边缘

    1# 使用图像加权运算组合 x 和 y 方向的 2 个边缘
    2yuan_xy_full = cv2.addWeighted(yuan_x_full, 1, yuan_y_full, 1, 0)
    3cv2.imshow('xy方向边缘(加权组合)', yuan_xy_full)
    4cv2.waitKey(0)

    解释:

    • 使用 cv2.addWeighted 函数将 x 方向和 y 方向的边缘图像进行加权组合。
    • 显示组合后的边缘图像,并等待用户按键继续。
输出结果:

总结

通过以上代码演示,我们展示了如何使用 OpenCV 的 Sobel 算子进行图像边缘检测。Sobel 算子通过计算图像在 x 和 y 方向上的梯度,能够有效地识别出图像中的边缘。此外,通过调整数据类型和使用绝对值转换,我们能够更好地显示边缘信息。这种边缘检测技术在许多计算机视觉应用中都有重要作用,如物体识别、运动检测等。

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

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

相关文章

这个俄罗斯平台爆火跨境圈,据说大卖已冲!无货源卖家又行了?

近几年,俄罗斯电商市场的增长速度非常惊人,从宏观来看,俄罗斯已经超越东南亚各国,成为2023年网上零售销售额增长最快的国家。据权威数据分析机构Statista的预测,2024年俄罗斯电子商务市场的收入预计能够达到337.6亿美元…

11、Django Admin启用对计算字段的过滤

重新定义admin.py中的Hero管理模型如下: admin.register(Hero) class HeroAdmin(admin.ModelAdmin):list_display ("name", "is_immortal", "category", "origin", "is_very_benevolent")list_filter ("…

代码随想录算法训练营第32天 动态规划part01| 题目:理论基础 、 509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯

代码随想录算法训练营第32天 动态规划part01| 题目:理论基础 、 509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯 文章来源:代码随想录 理论 题目名称:509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的…

沐渥科技:两显氮气柜和三显氮气柜要怎么选择?

两显氮气柜通常指的是控制面板上有两个LED数码显示界面,用于显示温度和湿度;三显氮气柜则有三个LED数码显示界面,能够直观地显示出温度、湿度和含氧量。这样的设计便于用户快速全面地了解柜内环境状态,不需要额外的操作即可掌握所…

PHP智能匹配轻松预订自习室在线订座系统小程序源码

智能匹配,轻松预订——自习室在线订座系统 📚【开篇:告别排队,迎接智能学习新时代】📚 还在为找不到合适的自习室座位而烦恼吗?是不是每次去图书馆或自习室都要提前好久去排队占位?现在&#…

不同大模型代码解释对比

包含ChatGPT,讯飞星火,通义千问,腾讯元宝,智谱清言。 目标是想让大模型解释一个用于预处理人体骨骼关节三维坐标数据样本进行填补空帧的Python函数。 def f_padding_none(data):s data.copy()# print(pad the null frames with…

笔记整理—uboot番外(6)针对x210的网卡说明

对于x210而言,在三星中与九鼎官方的uboot都默认使用了二号串口。详见CONFIG_SERIALn(n1~4)。 更改串口后,应先插回原串口,进行iROM打印,内部iNnad校验核失败的信息,之后再插入其串口进行启动。 …

win10添加右键菜单打开VSCode

当进入一个文件夹后,想右键直接打开我的工程,用发现没有vscode项。本文就来介绍如何右键通过vsCode打开项目。步骤1:在桌面新建一个txt文档,用文本编辑器打开 步骤2: 查看vscode所在位置 在桌面找到vscode快捷键图标&…

EasyExcel 文件导出 - 合并某些列值相同的行

文章目录 EasyExcel 文件导出 - 合并某些列值相同的行最终效果实现思路创建单元格合并的策略类使用 EasyExcel 文件导出 - 合并某些列值相同的行 在数据处理与文件导出的过程中,我们常常会遇到各种特定的需求。今天,我们就来探讨一下使用 EasyExcel 进行…

【STM32+HAL库】---- 硬件IIC驱动0.96OLED

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode内容原著声明 代码借鉴学习于以下文章: STM32 使用硬件IIC驱动0.96寸4针IOLED显示器(HAL库) 1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置引脚 1.3 导出工…

【盖世汽车-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

SQLite3 数据库

一、SQLite3 命令 1. 基本命令 .tables:用于查看数据库中的表。.headers on/off:开启或者关闭表头,方便查看表结构。.mode column:使列对齐,增强数据的可读性。.width 列宽1 列宽2:设置每一列的列宽&…

抖音无水印视频下载

抖音想必大家都不陌生,大家经常会在抖音上刷到各种有意思的视频,但是我们想保存就会发现会有水印信息,那么我们要如何下载无水印的图片呢? 使用说明 我们可以先点击抖音的分享按钮,复制一下视频的链接 然后打开智游剪…

Spring6梳理5——基于XML管理Bean环境搭建

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建BeanXML文件 ④创建Java类文件(User…

pycharm项目里有中文右下角修改无效怎么办 包括注释里有中文

在我们编写pycharm项目时,可能会遇到项目里面有中文运行导致报错,即使我们在右下角修改编码格式,还是无效的 解决办法:点击左上角File,Settings,找到Editor里面的File Encodings ,圈住的位置都要改为UTF-8点击Apply就可以了

NAT技术-将多个内部网络设备映射到一个公共IP地址

问题: 今天上课的时候老师让我们在VMware填同一个子网ip 192.168.196.0,然后给我们的linux镜像都是同一个压缩包,结果我们的静态ip地址都是同一个。 192.168.196.0下面有256个ip地址,范围是192.168.196.0到192.168.196.255。我们…

浏览器百科:网页存储篇-Session storage应用实例(九)

1.引言 在前面的文章中,我们详细介绍了如何在 Chrome 浏览器中打开并使用 Session storage 窗格,进行数据的查看、编辑和管理。作为网页存储技术的重要组成部分,sessionStorage在提升用户体验和数据管理能力方面发挥了重要作用。在本篇《浏览…

谷歌seo网址如何快速被收录?

想让你的网站快速被搜索引擎收录,可以采取几种不同的策略。首先,确保你的网站内容丰富、有价值,搜索引擎更喜欢收录内容质量高的网站。同时,增强网站的外链建设,做好这些站内优化,接下来就是通过谷歌搜索控…

一款云笔记支持在线协同文档,脑图,白板演示的工具,多个设备同步,让灵感与你同行(附源码)

前言 在快节奏的工作环境中,如何高-效地记录、整理并分享工作笔记已经成为了一项重要的技能。传统的笔记方式往往难以满足跨设备、即时同步以及团队协作的需求,导致信息孤岛和工作效率低下。面对这样的挑战,我们迫切需要一种全新的工具来改变…

Type-C接口上的DisplayPort

随着高清视频和多媒体内容的快速发展,数字接口技术也在不断演进。在众多接口技术中,DisplayPort(简称DP)凭借其高带宽、高分辨率支持和多功能性,逐渐成为显示技术的领跑者。本文将深入探讨DisplayPort的技术特点、应用…