day9 - 对花朵图像进行边缘检测

news2024/11/17 11:53:46

本期主要介绍常用于进行图像边缘检测的滤波器(算子):Sobel算子、Scharr算子、Laplacian算子;通过实验比较不同的算子的处理效果以及使用场景。

完成本期内容,你可以:

  • 了解图像梯度的原理和应用

  • 掌握使用Sobel算子、Scharr算子、Laplacian算子进行边缘检测

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码


Sobel算子

OpenCV将Sobel算子封装成了cv2.Sobel()方法。

函数原型: dst = cv2.Sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] )
dst为输出图像。

参数描述如下:

  • dst:目标图像

  • src:原始图像

  • ddepth:输出图像的深度

  • dx:x方向上的求导阶数。

  • dy:y方向上的求导阶数。

  • ksize:Sobel核的大小。该值为-1时,则会使用Scharr算子进行运算。

  • scale:计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。

  • delta:加在目标图像dst上的值,该值是可选的,默认为0。

  • borderType:边界样式

Scharr算子

OpenCV将Scharr算子封装成了cv2.Scharr() 方法。

函数原型: dst = cv2.Scharr( src, ddepth, dx, dy[, scale[, delta[, borderType]]] )
dst为输出图像。

参数描述如下:

  • dst:目标图像
  • src:原始图像
  • ddepth:输出图像的深度
  • dx:x方向上的求导阶数。
  • dy:y方向上的求导阶数。
  • scale:计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。
  • delta:加在目标图像dst上的值,该值是可选的,默认为0。
  • borderType:边界样式

Laplacian算子

OpenCV将Laplacian算子封装成了cv2.Laplacian()方法。

函数原型:dst = cv2.Laplacian( src, ddepth[ , ksize[ , scale[ , delta[ , borderType]]]])

参数描述如下:

  • ddepth:输出图像深度。
  • ksize :核的大小
  • scale:计算导数值时的缩放因子(可选)。
  • delta:加到目标图像上的亮度值(可选)。
  • borderType:边界样式。

具体步骤

1. 创建项目结构

创建项目名为对花朵图像进行边缘检测,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

对花朵图像进行边缘检测                    # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用不同的算子进行边缘检测

  1. code文件夹下创建edge.py文件;
  2. 导入所需的库,OpenCV;
  3. 读取dataset文件夹下的flower.png图片,并进行展示,标题为flower ;
  4. 分别使用Sobel算子、Scharr算子、Laplacian算子进行图像处理,并展示结果;

步骤一:创建文件并读取图像

代码实现

# 导入OpenCV
import cv2
# 读取图片
o = cv2.imread('../dataset/flower.png')
cv2.imshow('flower',o)

请添加图片描述

原图像

步骤二:使用Sobel算子进行边缘检测

代码实现

# 使用Sobel算子进行边缘检测
# 计算图像x方向的边缘,输出图像深度为64F
Sobelx = cv2.Sobel(o,cv2.CV_64F,1,0)
Sobelx = cv2.convertScaleAbs(Sobelx)
# 计算图像y方向的边缘,输出图像深度为64F
Sobely = cv2.Sobel(o,cv2.CV_64F,0,1)
Sobely = cv2.convertScaleAbs(Sobely)
# 将x和y方向的梯度图加权相加
Sobelxy = cv2.addWeighted(Sobelx,0.5,Sobely,0.5,0)
cv2.imshow('Sobel',Sobelxy)

请添加图片描述

使用Sobel算子进行边缘检测后的效果

步骤三:使用Scharrx算子进行边缘检测

代码实现

# 使用Scharrx算子进行边缘检测
# 计算图像x方向的边缘,输出图像深度为64F
Scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
Scharrx = cv2.convertScaleAbs(Scharrx)
# 计算图像y方向的边缘,输出图像深度为64F
Scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
Scharry = cv2.convertScaleAbs(Scharry)
# 将x和y方向的梯度图加权相加
Scharrxy = cv2.addWeighted(Scharrx,0.5,Scharry,0.5,0)
cv2.imshow('Scharr',Scharrxy)

请添加图片描述

使用Scharrx算子进行边缘检测后的效果

步骤四:使用Laplacian算子进行边缘检测

代码实现

# 使用Laplacian算子进行边缘检测
# 计算图像图像边缘信息,滤波核的大小为3,输出图像深度为64F
Laplacian = cv2.Laplacian(o,cv2.CV_64F,ksize = 3)
Laplacian = cv2.convertScaleAbs(Laplacian)
cv2.imshow("Laplacian",Laplacian)

请添加图片描述

使用Laplacian算子进行边缘检测后的效果

步骤五:关闭窗口

代码实现

cv2.waitKey()
cv2.destroyAllWindows()

3. 结果比较

通过比较三种算子进行边缘检测以后的效果,会发现:三种算子均可以满足图像边缘检测的需求,scharr算子较sobel算子提取的细节边缘更多,Laplacian算子提取边缘后的图像亮度更高。

点击下载源码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QxRibbon 知:搭建 PyQt5 环境

文章目录 安装 Python安装 PyQt5安装 PyCharm构建 QxRibbon参考资料 安装 Python 参考其它教程 安装 PyQt5 PyQt5 版本:5.15.2 运行 windows cmd.exe 命令提示符,通过下列方法进行安装(友情提醒:关闭流氓软件 360) …

B站w_rid逆向

文章目录 目标网站加密参数定位算法还原很久没有看过B站的项目了,正好有小伙伴问B站的w_rid咋逆向的, w_rid?初一听没啥印象啊,以前的B站应该没有这个东东,去看了一下,原来是更新了。 就看了下B站pc端作品列表,开始有校验w_rid了,本次目标就是逆向这个参数。 目标网…

Live800在线客服系统:客户体验即是业绩来源

“客户就是上帝”,这一论断在商业行为中早已成为不争的事实。 所有企业都知道,满足客户的需求才能让企业稳步发展。在产品同质化严重的今天,客户服务成为核心竞争力,试想一下,在产品、价格相差无几的两个企业中&#…

网络安全——应用层安全协议

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.应用层安全协议 1.应用层安全威胁 2.电子邮件安全协议 1.MIME协议 2.电…

es 二、核心概念

目录 Nrt cluster集群概念 node节点 Document 文档 Index 索引 Field字段 Type 类型 shard分片 Replica shard副本 数据库和es概念对比 Nrt 写入一秒后就能搜到 cluster集群概念 一台机器启动一个实例即可,多个组成 node节点 一个实例一个节点 Documen…

Hover.css动画库的使用

目录 1、 Hover.css是什么? 2、引入 2.1、整个文件引入 2.2、复制所需要的代码 案例: 1. 卷边效果 2. 调整大小的卷边 类别: 1、 Hover.css是什么? Hover.css是一个CSS3鼠标悬停的动画方案,里面包含了许多纯c…

Linux驱动入门(二)——嵌入式处理器介绍和构建驱动程序开发环境

文章目录 嵌入式处理器和开发板介绍处理器简述处理器种类Intel的PXA系列处理器StrongARM系列处理器MIPS处理器摩托罗拉龙珠(DragonBall)系列处理器日立SH3处理器德州仪器OMAP系列处理器 ARM处理器ARM处理器简介ARM处理器的特点ARM处理器系列ARM处理器的应用ARM处理器选型 STM32…

Netty实战(八)

引导 一、引导1.1 什么是引导1.2 Bootstrap 类1.3 引导客户端和无连接协议1.4 引导客户端1.5 Channel 和 EventLoopGroup 的兼容性 二、引导服务器2.1 ServerBootstrap 类2.2 引导服务器 三、从 Channel 引导客户端四、在引导过程中添加多个 ChannelHandler五、使用 Netty 的 C…

1.实验技术-收藏吃灰去,深入浅出常规PCR

1.PCR 原理与过程 2.PCR 体系组分 3.PCR 应用 4.PCR 常见问题及解决方案 前言 PCR(Polymerase Chain Reaction,聚合酶链式反应)是现代生物学中一项必不可少的技术,能进行体外扩增DNA序列,为基因组研究和分子诊断提供…

27事务管理AOP

一、MySQL事务回顾 二、Spring事务管理 Spring框架的第一大核心:IOC控制反转 在DeptServiceImpl下删除部门方法下新加一个删除员工信息的操作,注意:此时的id是部门id。 1、问题分析 2、Transactional-Spring事务管理 一般是在Service实现类的…

想用Python做副业?看这一篇就够了

大家好,我是耿直。 随着人工智能、大数据、物联网的广泛应用,与之紧密关联的Python技术开始受到人们的极大关注。各行业对Python技术服务的需求量呈指数级暴增,尤以爬虫技术服务为甚,供不应求早已成为常态。 而近两年受到各种不…

Springboot +spring security,实现RememberMe和实现原理分析

一.简介 我们在登录网站的时候,除了让你输入用户名和密码,还会有个勾选框: 记住我。 比如下面这个截图: Spring Security 也提供了这个功能,今天来实践下。 二.创建项目 如何创建一个SpringSecurity项目&#xff0…

【精】MySQL5.7没有row_number()函数如何组内排序和求分组topN

当我们遇到一些需求,比如组内分组排序,分组topN等,很容易想到用row_number()函数 ​在MySQL8.0版本中支持row_number函数,本文不做讨论,如果是MySQL5.7版本,要怎么写SQL呢? 测试表:…

Three.js教程:点、线、网格模型介绍

推荐:将 NSDT场景编辑器 加入你的3D工具链 其他系列工具: NSDT简石数字孪生 点、线、网格模型介绍 经过前面几章学习相信你对点模型Points、线模型Line、网格模型Mesh已经有了大致了解,本节课就对点、线、网格模型模型进行简单总结。 点模型…

阿里大佬随手甩出一份覆盖全网的微服务架构笔记,让我涨薪60%

在这个凡事皆互联的时代,越来越多的人和物成为互联网上的节点,不断扩充着互联网这张大网的边界。节点即价值,更多的节点意味着更大的价值。 微服务在这个互联网时代依旧是最火热的技术之一,在当下互联网企业不懂微服务是不行的&a…

软件测试人员如何为项目的质量保障兜底?看完你就明白了...

上线前层层保障 01文档管理 关键词:需求文档、设计文档、测试文档 1.需求和设计产出方为产品、开发,测试需要做好流程监督,这里重点说下测试文档。 2.测试文档,从业务领域来说,一般有测试计划、测试用例、业务总结文…

环信新鲜出炉的 React-UIKIT 库初体验,瞬间实现即时通讯功能!

一、前言 为了加快即时通讯需求产品开发速度,将更多的时间放在关系核心业务逻辑的处理上,环信正式推出可扩展,易使用的 React 版本的 UIKIT 库 此 UIKit 库 是基于 环信 Web SDK 开发的的 UI 组件库,它提供了常用的 UI 组件、包含…

【尚好房项目实战】:第一章项目架构介绍

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 spring版本:5.3.1 文章目录 前言尚好房项目实战系列文章目录一、项目介绍二、核心技术点三、项目…

次氯酸消毒剂制备中的全氟醚橡胶密封耐腐蚀电动阀门解决方案

摘要:次氯酸作为是一种新型消毒剂,近年来广泛应用于医疗卫生机构、公共卫生场所和家庭的一般物体表面、医疗器械、医疗废物等。由于次氯酸的酸性和强氧化性,使得次氯酸生产制备过程中会给流量调节阀门带来腐蚀并影响寿命和控制精度&#xff0…

电影票房之数据分析(Hive)--第1关

电影票房之数据分析(Hive) 第1关:统计2020年上映的电影中,当前总票房最高的10部电影 本关任务 基于EduCoder平台提供的初始数据集,统计 2020 年上映的电影中,当前总票房最高的 10 部电影。 编程要求 本…