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

2023-09-18 10:24:35

本小节代码在配套资料“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 算子边缘计算相关的实验

就结束了。

更多推荐

思腾云计算

为推动AI行业的国产化布局,迎合国产化服务器的市场需求,思腾合力推出华思系列服务器。1.前置24盘12GSASEXP硬盘背板,可以插24个3.5/2.5寸SAS/SATA硬盘;2.后置12盘12GSASEXP硬盘背板,可插12个3.5/2.5寸SAS/SATA硬盘,外加4口U.2硬盘背板1套;3.内置2个M.2SATA

线性代数的本质(十一)——复数矩阵

文章目录复数矩阵附录极大线性无关组向量叉积复数矩阵矩阵AAA的元素aij∈Ca_{ij}\in\Complexaij​∈C,称为复矩阵。现将实数矩阵的一些概念推广到复数矩阵,相应的一些性质在复数矩阵同样适用。定义:设复矩阵A=(aij)m×nA=(a_{ij})_{m\timesn}A=(aij​)m×n​矩阵Aˉ=(

SkyWalking快速上手(五)——存放在内存、数据持久化

文章目录存放在内存一、概述二、数据存放方式1.指标数据2.跟踪数据三、优势和注意事项四、总结数据持久化一、指标数据的持久化二、跟踪数据的持久化三、注意事项四、总结存放在内存一、概述SkyWalking是一个开源的分布式系统追踪和性能监控工具,用于帮助开发人员和运维人员监控和分析分布式系统的性能问题。在SkyWalkin

SkyWalking入门之Agent原理初步分析

一、简介当前稍微上点体量的互联网公司已经逐渐采用微服务的开发模式,将之前早期的单体架构系统拆分为很多的子系统,子系统封装为微服务,彼此间通过HTTP协议RESETAPI的方式进行相互调用或者gRPC协议进行数据协作。早期微服务只有几个的情况下,我们遇到问题可以直接简单、快速地通过采集日志进行分析,是A服务存在问题还是B

ReadWriteLock(读写锁)和阻塞队列BlockingQueue与同步队列SynchronousQueue

1.ReadWriteLockpackagecom.kuang.rw;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.locks.ReadWriteLock;importjava.util.concurrent.locks.R

传导和辐射EMI有什么区别?

当我们设计原型或使用开发板时,通常可以忽略电磁干扰。但EMI在现实生活中的电子设备和系统中是一个重要的主题,工程师有责任确保电路能够在预期的EMI水平下正常运行,并且不会产生过多的EMI。我倾向于将EMI与无线干扰联系起来,考虑到名称,这并不令人惊讶:它被称为电磁干扰,我们自然将其与电磁辐射联系起来。但正如您从本文标题

实在智能携手40+央企,探索财务大模型及数智化实践与应用

“这次培训给我一个最大的感触就是,过去以为AI智能化、大模型技术是很高深的事情。但现在,我们通过RPA等数字化工具,自主根据自己的工作岗位,完成业务自动化流程的开发和设计。AI技术没有想象中的那么难入门。”这是一位参加了“财务大模型及AI+RPA数智化实践与应用”专题研修班的学员,培训后有感而发的心得。探索财务数智化落

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(三)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.数据预处理2.模型构建1)定义模型结构2)优化损失函数3.模型训练及保存1)模型训练2)模型保存4.模型应用1)制作页面2)模型导入及调用3)模型应用代码相关其它博客工程源代码下载其它资料下载前言本项目采用了矩阵分解算法,用于对玩家已游玩的数据进行深入分析。它

10年经验之谈 —— 如何做接口测试呢?接口测试有哪些工具?

回想入职测试已经10年时间了,初入职场的我对于接口测试茫然不知。后来因为业务需要,开始慢慢接触接口测试。从最开始使用工具进行接口测试到编写代码实现接口自动化,到最后的测试平台开发。回想这一路走来感触颇深,因此为了避免打算学习接口测试的同学走冤枉路,特此分享我的学习经验。之前我已经在知乎做过几次接口的分享一、接口的重要性

5W2H分析法

1.概念它的历史可以追溯到二战时期的美国陆军兵器修理部,虽然具体由谁发明可能存在争议,但可以肯定的是,这种方法在当时被广泛应用,并被证明是一种非常有效的创新和问题解决方法。5W2H分析法以五个以W开头的英语单词和两个以H开头的英语单词为线索,帮助人们发现问题,寻找解决方案,进行设计构思,从而创新和发明新的项目。它与其他

QT Day5

目录1.针对登入框,新加入了注册功能,使用数据库存储账号密码信息widget.hwidget.cppsecond.hsecond.cpp2.思维导图1.针对登入框,新加入了注册功能,使用数据库存储账号密码信息widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#

热文推荐