opencv图像处理之图像梯度

opencv——图像梯度计算 sobel算子、scharr算子、laplacian算子 阅读详情

1.原理

梯度简单来说就是求导。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和Laplacian。
Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对Sobel的优化(使用小的卷积核求解求解梯度角度时)。Laplacian 是求二阶导数。

2.Sobel算子

  • cv.Sobel()
sobelx=cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=5)

参数按顺序为:原图、输出图像的深度、x方向求导的阶数、y方向求导的阶数、卷积核大小。
Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。如果ksize=-1,会使用3x3 的Scharr 滤波器,它的的效果要比3x3 的Sobel 滤波器好(而且速度相同,所以在使用3x3 滤波器时应该尽量使用Scharr 滤波器)。3x3 的Scharr 滤波器卷积核如下:
在这里插入图片描述

3.Laplacian算子

  • cv.Laplacian()
laplacian=cv2.Laplacian(gray,cv2.CV_64F)

拉普拉斯算子可以使用二阶导数的形式定义,可假设其离散实现类似于二阶Sobel 导数,事实上,OpenCV 在计算拉普拉斯算子时直接调用Sobel 算子。

4.代码和效果

def gradient(self):
    gray=cv2.imread(self.infile,0)
    #参数1,0为只在x方向求一阶导数,最大可以求2阶导数。y方向同理。
    #参数cv2.CV_64F结果图像的深度,可以使用-1,与原图像保持一致(np.uint8)
    sobelx=cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=5)
    sobely=cv2.Sobel(gray,cv2.CV_64F,0,1,ksize=5)
    laplacian=cv2.Laplacian(gray,cv2.CV_64F)

    titles = ['raw', 'sobelx','sobely','laplacian']
    images = [gray, sobelx,sobely,laplacian]
    for i in range(4):
        plt.subplot(1,4,i+1),plt.imshow(images[i],'gray')
        plt.title(titles[i])
        plt.xticks([]),plt.yticks([])
    plt.show()

在这里插入图片描述
下面打印了部分gray和sobelx的像素值。有点不太明白为什么出现大片的灰色。超出255和小于0的值是怎么处理的呢?

[[ 98 122 98 … 120 97 98]
[113 206 229 … 246 199 122]
[ 98 234 255 … 255 237 110]
…
[121 248 255 … 254 234 109]
[ 99 198 226 … 232 216 121]
[105 129 103 … 111 120 80]]
[[ 0. 2804. 1940. … -1938. -3142. 0.]
[ 0. 3515. 2286. … -2230. -3667. 0.]
[ 0. 4563. 2669. … -2555. -4429. 0.]
…
[ 0. 4397. 2688. … -2617. -4417. 0.]
[ 0. 3459. 2343. … -2115. -3467. 0.]
[ 0. 2854. 2036. … -1762. -2894. 0.]]

我们应该知道为什么要扩大图像的深度,而不采用原来的深度呢?

想象一下一个从黑到白的边界的导数是正数,而一个从白到黑的边界点导数却是负数。如果原图像的深度是np.int8 时,所有的负值都会被截断变成0,换句话说就是把从白到黑边界丢失掉。所以如果这两种边界你都想检测到,最好的的办法就是将输出的数据类型设置的更高,比如cv2.CV_16S,cv2.CV_64F 等。取绝对值然后再把它转回到cv2.CV_8U。

如下图所示:直接用-1为参数,从白色到黑色的边界被丢弃了。而先扩深度,再去绝对值并减小深度,是可以检测出从白色到黑色的边界的。
在这里插入图片描述
(1) 此时若把我的代码中的cv2.CV_64F都改为-1,得到结果如下:

sobelx=cv2.Sobel(gray,-1,1,0,ksize=5)
sobely=cv2.Sobel(gray,-1,0,1,ksize=5)
laplacian=cv2.Laplacian(gray,-1)

在这里插入图片描述
(2)若我把得到的图像先取绝对值,再把数据深度转为和原来相同的。

sobelx=np.uint8(np.abs(cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=5)))
sobely=np.uint8(np.abs(cv2.Sobel(gray,cv2.CV_64F,0,1,ksize=5)))
laplacian=np.uint8(np.abs(cv2.Laplacian(gray,cv2.CV_64F)))

在这里插入图片描述

5.怎么理解用卷积核来检测边界呢?

可以参考卷积实现

OpenCV—拉普拉斯算子(Laplacian)边缘检测:原理与实现 拉普拉斯算子是一种常用于图像处理的边缘检测技术,它有助于识别图像中的边缘和纹理特征。本文将深入探讨拉普拉斯算子的原理,以及如何使用OpenCV实现它。 阅读详情

相关推荐

OpenCV图像处理教程C++(十一) 形态学操作--膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽

形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种,他们是:膨胀与腐蚀(Dilation与Erosion) 膨胀:此操作将图像(A)与任意形状的内核 (B),通常为正方形或圆形,进行卷积。内核 B 有一个可定义的 锚点, 通常定义为内核中心点。进行膨胀操作时,将内核 B 划过图像,将内核 B 覆盖区域的最大相素值提取,并...

法兰西流浪者博客 8165

图像梯度

文章目录一.sobel算子二.scharr算子三.laplace算子 图像梯度代表图像灰度值变化的速度,对于一副图像而言,其边缘部分两侧灰度值相差较大,梯度值大,所以对一副图像求梯度可以突出图像边缘的信息。由于像素值为离散值,所以其梯度其是就是差分运算,其本质上也就是一种空间滤波。 一.sobel算子 其掩模结构为: opencv中提供了cv2.Sobel()来实现Sobel算子的运算,其语法常用形式: dst=cv2.Sobel(src,ddepth,dx,dy,[,ksize[,scale[,de.

weixin_43327191的博客 5468

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3202

图像处理之梯度

图像处理之梯度,Sobel算子

机器学习与神经网络 7954

基于溶解气体分析(DGA)的变压器DGA数据故障诊断含代码含数据

在拥有可靠的DGA数据的前提下,结合机器学习分类算法,可以实现变压器的故障诊断。在此数据集的基础上,用随机森林跑出的结果如图。

Jason_Orton的博客 2704

comfyui中的k采样器报错Given groups=1, weight of size [320, 4, 3, 3], expected input[2, 8, 96, 54] to have 4

求助大佬!!!我运行comfyui的时候,k采样器变紫,同时报错显示:

M1226401728的博客 5180

OpenCV图像梯度

实验目的 使用三种梯度滤波器 三种梯度滤波: Sobel高斯平滑与微分的结合体,坑噪音好。 Scharr 是对 Sobel使用小的卷积核求梯度角度的优化。 Laplacian 算子,调用二阶的Sobel 为什么要使用梯度滤波 轮廓边缘灰度变化明显些,层次感强些 原理参考:图像梯度的基本原理 代码实现 import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('image1.jpg',0) #

milk_and_bread的博客 1100

一文搞懂深度学习:最全神经网络介绍

本文是深度学习系列文章的第二篇,我们将深入探讨各种类型的人工神经网络,探索它们独特的特性和应用。

2402_82802238的博客 2801

OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔

OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔 目录OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔1. 图像梯度1.1 Sobel和Scharr算子1.2 Laplacian算子2. Canny边缘检测2.1 多阶段的Canny边缘检测算法2.2 OpenCV中的Canny Edge检测 1. 图像梯度 首先我们来看看什么是图像梯度:图像梯度可以把图像看作二维离散函数,图像梯度就是这个二维函数的求导,图像边缘一般都是通过对图像进行梯度运算来

小菜鸡的小博客 1万+

使用单调栈求解最大矩形面积问题的C++实现

通过本文的介绍,我们详细讲解了如何使用单调栈求解砖墙中最大矩形面积的问题,并提供了完整的C++代码实现。希望通过本文的学习,你能掌握单调栈的基本概念及其在实际问题中的应用。如果你有任何疑问或建议,欢迎在评论区留言交流。

m0_57781768的博客 814

S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

Robot_PLC_HMI_Automation 4226

OpenCV(8)图像处理|图像梯度与梯度算子

参考。

dowrongagain的博客 1689

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

算法大师! 1324

Python OpenCV图像处理:❤️转换+梯度❤️边缘检测+图像融合,aplacian金字塔合成新物种

来看!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 3915

AI辅助决策支持系统架构设计避坑:5个常见技术选型误区及正确方案

AI辅助决策支持系统(AI-DSS)是指通过人工智能技术(机器学习、自然语言处理、知识图谱等)赋能传统决策支持系统,帮助决策者在复杂业务场景中(如供应链优化、风险控制、医疗诊断、金融投资等)提升决策效率和准确性的系统。与传统BI工具不同,AI-DSS不仅能"展示数据",还能基于数据生成"决策建议"甚至"自动执行决策"。技术选型是AI-DSS架构设计的核心环节,涉及数据处理引擎、模型框架、算力资源、集成接口等关键组件的选择。效果不达标:模型预测精度低、决策建议不可用;成本失控:算力资源浪费、维护成本高企。

AIGC应用创新大全的博客 1384

STM32实现简单的智能电梯控制

上述代码实现了一个简单的智能电梯控制器。电梯的状态包括IDLE(停止)、UP(向上移动)和DOWN(向下移动)三种状态。通过向上和向下按钮的按下,可以控制电梯移动到指定的楼层。在主循环中,不断读取当前楼层的按钮状态,并根据电梯状态决定执行的动作。具体的楼层数量和按钮的GPIO引脚可以根据实际情况进行调整。要实现简单的智能电梯控制,我们可以使用STM32微控制器来实现。

2401_85258012的博客 337

(04)python-opencv图像处理——图像阈值、平滑图像、形态转换、图像梯度

在本博文中,进行图像阈值、平滑图像、形态转换、图像梯度的学习以及介绍。

zyz博客 1519

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OpenCV 图像处理三(图像梯度--边缘检测【图像梯度、Sobel 算子、 Scharr 算子、 Laplacian 算子、Canny 边缘检测】)

边缘检测并非万能,边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。为了避免信息丢失,推荐使用更高的数据类型来进行计算,例如 cv2.CV_64F,即64位浮点型。这样,计算结果将以浮点数的形式保存,包括负数。然后,可以通过取绝对值或其他操作将其映射为需要的数据类型,例如 cv2.CV_8U,即8位无符号整数。

m0_74154295的博客 4513

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OpenCV图像处理应用(面向Python)之图像梯度与Canny边缘检测

OpenCV图像处理应用(面向Python)欢迎来到梁老湿课堂1.图像梯度2.Sobel算子3.Laplacian算子4.Canny边缘检测 欢迎来到梁老湿课堂 1.图像梯度 可以理解为: 图像梯度计算的是图像变换的速度。在图像边缘部分,灰度值变化大,那么它的梯度值也会之而变大;相反图像中比较平滑的部分,灰度值变化小,那么它的梯度值也会变化就小。 2.Sobel算子 Sobel 算子是一种离散的微分算子,该算子结合了高斯平滑和微分求导运算。该 算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。 dst

weixin_52272597的博客 1357

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenCV图像处理(十一)---图像梯度

安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则。通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线...

xyl666666的博客 5011

OpenCV图像处理——图像梯度

图像梯度

lzh的博客 1158

【OpenCV】Python图像处理之形态学梯度运算

形态学梯度是一种基于膨胀和腐蚀运算的边缘提取方法,通过计算膨胀图像与腐蚀图像的差值来获取目标轮廓。其核心公式为Gradient=Dilation(img)−Erosion(img),能有效提取物体边缘。OpenCV中通过cv2.morphologyEx()函数实现,支持三种梯度类型:基本梯度(内外边缘)、内部梯度(仅内边缘)和外部梯度(仅外边缘)。该方法计算速度快,适用于二值图像,但边缘较粗且抗噪性较差,适合快速轮廓提取等实时性要求高的场景,与Canny边缘检测相比各有优势。实际应用中需根据Kernel大小

棒棒的皮皮 1006

OpenCV-Python图像处理学习笔记(四)——形态学操作、图像梯度

形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作。两个基本的形态学操作是腐蚀和膨胀。他们的变体构成了开运算,闭运算,梯度等。 1 形态学操作 形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作。两个基本的形态学操作是腐蚀和膨胀。他们的变体构成了开运算,闭运算,梯度等。就像土壤侵蚀一样,这个操作会

weixin_57726558的博客 783

OpenCV图像处理和应用—图像梯度

© Fu Xianjun. All Rights Reserved. 图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计算的是图像的边缘信息。 Sobel 理论基础 Sobel 算子是一种离散的微分算子,该算子结合了高斯平滑和微分求导运算。该算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。 函数使用 代码如下: 计算图像x方向边缘 sobelx = cv2.S

FloatingDreaam的博客 386

Python+OpenCV图像处理 —— 图像梯度

【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑 Python+OpenCV图像处理(十二)—— 图像梯度 图像梯度的基本原理 图像梯度计算 OpenCV学习笔记(10)——图像梯度 import cv2 import numpy as np # sobel def S...

Elvirangel的博客 675
上一篇: opencv图像处理之图像平滑(模糊)
下一篇: 【Houdini】安装后,启动黑屏(windows10)
SuperWiwi
博客等级 码龄10年 316粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值