迅为iTOP-RK3568开发板Sobel 算子边缘检测

news2024/11/25 10:32:17

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程

\04_OpenCV 开发配套资料\32”目录下,如下图所示:

Sobel (索贝尔)算子是计算机视觉领域的一种重要处理方法。主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。

索贝尔算子把图像中每个像素的上下左右四领域的灰度值加权差,在边缘处达到极值从而检测边缘。在技术上,它是一离散性差分算子,用来运算图像亮度函数的梯度之近似值。在图像

的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量。

索贝尔算子不但能产生较好的检测效果,而且对噪声有着平滑抑制作用,是最为常用的边缘检测算子,但是得到的边缘较粗,可能出现伪边缘。

cv2.Sobel 函数功能:

使用 Sobel 算子进行边缘检测。

函数原型:

dst = cv2.Sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] )

参数定义:

dst 代表目标图像。

src 代表原始图像。

ddepth 代表输出图像的深度。

dx 代表 x 方向上的求导阶数。

dy 代表 y 方向上的求导阶数。

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

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

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

borderType 代表边界样式。

而在实际操作中,计算梯度值可能会出现负数。通常处理的图像是 8 位图类型,如果结果也是该类型,那么所有负数会自动截断为 0,发生信息丢失。所以,为了避免信息丢失,在

计算时使用更高的数据类型 cv2.CV_64F,再通过取绝对值将其映射为 cv2.CV_8U(8 位图)类型。故此还需要调用 convertScaleAbs()函数计算绝对值,并将图像转换为 8 位图进行显示。其算法原型如下:

dst = convertScaleAbs(src[, dst[, alpha[, beta]]])

参数定义:

dst 代表处理结果。

src 代表原始图像。

alpha 代表调节系数,该值是可选值,默认为 1。

beta 代表调节亮度值,该值是默认值,默认为 0。

实验:

实验要求:

使用 cv2.Sobel 函数,分别对 x 轴和 y 轴进行边缘检测,随后使用 cv2.addWeighted 函数以0.5:0.5 的比例将两个图像进行融合,最后使用 cv2.imshow()函数对原图和边缘检测的三个图

像进行展示。

实验步骤:

首先进入到 ubuntu 的终端界面将“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程\04_OpenCV 开发配套资料\32”路径下的 number.png 拷贝到 ubuntu 虚拟机上,拷贝完成如

下图所示:

然后来到 ubuntu 虚拟机的终端界面,输入以下命令来创建 demo32_Sobel.py 文件,如下图所示:

vim demo32_Sobel.py

然后向该文件中添加以下内容:

1 import cv2 #opencv 的缩写为 cv2,导入 opencv

2 img = cv2.imread('number.png',1) #flags 参数为 1,返回彩色图像

3 cv2.imshow('原图',img)#通过 cv2.imshow()函数展示原图

4 sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)# 使用 Sobel 算子进行边缘检测,数据类型设置为 cv2.CV_64F,

5 只算 x 方向梯度,Sobel 核大小设置为 3

6 sobelx = cv2.convertScaleAbs(sobelx) # 计算绝对值

7 cv2.imshow('sobelx',sobelx)#通过 cv2.imshow()函数展示 x 方向梯度边缘检测计算之后的图像

8 sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3) #使用 Sobel 算子进行边缘检测,数据类型设置为 cv2.CV_64F, 

9 只算 x 方向梯度,Sobel 核大小设置为 3

10 sobely = cv2.convertScaleAbs(sobely) #计算绝对值

11 cv2.imshow('sobely',sobely)#通过 cv2.imshow()函数展示 y 方向梯度边缘检测计算之后的图像

12 sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0) # 图像融合的系数比为 0.5:0.5,0 表示偏置项

13 cv2.imshow('sobelxy',sobelxy)#通过 cv2.imshow()函数展示融合之后的图像

14 cv2.waitKey(0)#等待下一次按键按下

第 1 行导入了 opencv 库;

第 2 行使用了 imread()函数对 number.png 图片进行读取;

第 3 行使用了 imshow()函数对原图像进行展示;

第 4 行使用 Sobel 算子进行边缘检测计算,数据类型设置为 cv2.CV_64F,只算 x 方向梯

度,Sobel 核大小设置为 3;

第 8 行使用 Sobel 算子进行边缘检测计算,数据类型设置为 cv2.CV_64F,只算 y 方向梯度,Sobel 核大小设置为 3;

第 6 行和第 10 行使用了 convertScaleAbs()函数获取绝对值,并将图像转换为 8 位;

第 7 行和第 11 行使用了 imshow()函数对两个方向梯度进行边缘检测计算之后的图像进行展示;

第 12 行使用了 addWeighted()函数进行图像融合,两个图像的融合系数比为 0.5:0.5;

第 13 行使用了 imshow()函数对融合之后的图像进行展示;

第 14 行使用了 waitKey()函数,持续显示展示照片直到按键的按下。

保存退出之后,在终端界面中输入以下命令进行 python 代码的运行,运行结果如下图所示:

python demo32_Sobel.py

第 1 张图为原图,一个数独图像被显示了出来,第 2 张图像为 x 轴方向梯度经过边缘检测计算的图像,可以看到纵向的线条被很好的区分了出来,第 3 张图像为 y 轴方向梯度经过边缘

检测计算的图像,可以看到横向的线条被很好的区分了出来,第 4 张图像为两张边缘计算图像的融合,可以看到图像的边缘特点被很好的展现了出来,至此 Sobel 算子边缘计算相关的实验

就结束了。

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

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

相关文章

计算机专业毕业设计项目推荐07-科研成果管理系统(JavaSpringBoot+Vue+Mysql)

科研成果管理系统(JavaSpringBootVueMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以…

寄存器与内存详解

目录 CPU、寄存器、内存之间的关系 寄存器 通用寄存器 EAX寄存器 EBX寄存器 ECX寄存器 EDX寄存器 EBP寄存器 ESP寄存器 ESI寄存器 EDI寄存器 总结 段寄存器 分段内存管理机制 段与段寄存器 指令指针寄存器EIP 标志寄存器 内存 虚拟内存 大端存储与小端存储…

大数据Flink(八十三):SQL语法的DML:With、SELECT WHERE、SELECT DISTINCT 子句

文章目录 SQL语法的DML:With、SELECT & WHERE、SELECT DISTINCT 子句 一、DML:With 子句

使用 Docker 安装 Elasticsearch (本地环境 M1 Mac)

Elasticsearchkibana下载安装 docker pull elasticsearch:7.16.2docker run --name es -d -e ES_JAVA_OPTS“-Xms512m -Xmx512m” -e “discovery.typesingle-node” -p 9200:9200 -p 9300:9300 elasticsearch:7.16.2docker pull kibana:7.16.2docker run --name kibana -e EL…

IntelliJ IDEA使用——常用快捷键(Windows版)

文章目录 版本说明搜索操作层级关系查看光标选择代码定位代码操作Git操作编辑器操作 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2(下载IntelliJ IDEA) ps:不同版本一些图标和设置位置可能会存在差异,但应该大部分都差不多。…

【LLM工程篇】deepspeed | Megatron-LM | fasttransformer

note 当前比较主流的一些分布式计算框架 DeepSpeed、Megatron 等,都在降低显存方面做了很多优化工作,比如:量化、模型切分、混合精度计算、Memory Offload 等 文章目录 note大模型参数计算1. 模型参数单位2. 训练显存计算3. 推理显存计算 大…

nodejs中的错误类型及捕获处理

nodejs中的错误类型及捕获处理 在 node 中,提供了 error 模块,并且内置了标准的 JavaScript 错误,本文将介绍在node中错误类型以及如何捕获。 错误类型 js错误 标准的js错误,跟在浏览器中运行js时提示的错误类型一样 RangeEr…

Linux 遍历目录(cd 命令)

Linux 遍历目录(cd 命令) 文章目录 Linux 遍历目录(cd 命令)一、cd 命令二、绝对文件路径三、相对文件路径 一、cd 命令 在 Linux 文件系统上,可以使用 cd 命令将 shell 会话切换到另一个目录。cd 命令的格式也很简单…

C++---多态

多态 前言多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写 override和final 虚函数的默认参数 抽象基类 前言 在买火车票的时候,如果你是学生,是买半价票&#…

8年经验之谈 —— App测试常用的两种工具

一、监控工具 DDMS的全称是Dalvik Debug Monitor Service ,是Android开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、模拟接收及发送SMS、虚拟地理坐标等服务。 启动DDMS Eclipse中启…

某上市企业RFID资产管理设计解决方案

背景简介 该客户是一家集金融业务、房地产开发、商业地产等多元业务于一体的大型企业集团,作为一个拥有大量固定资产的企业,该客户一直以来面临着资产管理的难题,为了提高资产管理效率,降低管理成本,选择了广东航连科…

Python运算符、函数与模块和程序控制结构

给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…

elk日志某个时间节点突然搜索不到了

elk日志某个时间节点突然搜索不到了,检查filebeat正常 Kibana手动上传数据: 响应: Error: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [2000]/[2000] maximum shards open 原因:ElasticSearch总分片数量导致的异常,ES…

语言建模的发展阶段以及大规模语言模型的背景介绍

语言本质上是一个由语法规则控制的复杂、精密的人类表达系统,开发能够理解和掌握语言的AI 算法是一个重大挑战。作为一种主要方法,语言建模在过去两十年中已被广泛研究,从统计语言模型发展到神经语言模型,用于语言理解和生成。从技…

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

竹云董事长董宁受邀出席香港第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛并作主题演讲

“一元初分,宇宙万仪”。9月16日,第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛在香港圆满落幕。全球权威机构、顶级专家学者、杰出企业家代表齐聚一堂,畅所欲言,全面总结分析元宇宙现状,综合研判元宇宙未来发展趋势。…

DJYOS开源往事二:DJYOS开源工作室时期

2010年,罗侍田、王建忠等人在南山科技园创建都江堰操作系统工作室。通过自有资金、网友赞助资源等各种形式,从2010年开始建立了一支全职的民间组织的国产操作系统开发者团队。

vite构建的本地开发环境请求第三方接口时如何解决跨域问题

前言 在vite构建的本地开发环境中,请求第三方接口时如何解决跨域问题呢? 本地开发环境,只要请求接口,如果没有做代理配置,都会存在同源策略,跨域的问题,要么在本地做代理,要么在服务器做代理,要么在请求头中设置允许跨域,下面我们来介绍下如何解决vite构…

keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf

keil报错:Flash Download failed - Could not load file’…\Output\Template.axf,如下图所示: 原因是很多.h文件没有定义位置,可以按照下图操作: 而且,如果是想使用压缩包,那一定要关闭keil后…