1,图像梯度的概念
梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(无论是横向的、纵向的、斜方向的等等),所需要的是一个核模板。模板的不同结果也不同。所以能够看到,全部的这些个算子函数,归结究竟都能够用函数cv2.filter2D()来表示,不同的方法给予不同的核模板,然后演化为不同的算子。

在微积分中,一维函数的一阶微分的基本定义是这样的:


而图像是一个二维函数f(x,y),其微分当然就是偏微分。因此有:

因为图像是一个离散的二维函数,ϵ不能无限小,我们的图像是按照像素来离散的,最小的ϵ就是1像素。因此,上面的图像微分又变成了如下的形式(ϵ=1):


这分别是图像在(x, y)点处x方向和y方向上的梯度,从上面的表达式可以看出来,图像的梯度相当于2个相邻像素之间的差值。x方向和y方向上的梯度可以用如下式子表示在一起:

这里又是平方,又是开方的,计算量比较大,于是一般用绝对值来近似平方和平方根的操作,来降低计算量:

2,经典的图像梯度算法
经典的图像梯度算法考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian。Sobel,Scharr其实就是求一阶或二阶导。Scharr是对Sobel的部分优化。Laplacian是求二阶导。 假如对一幅数字图像,求出M之后与原来每个像素点对应值相加,则图像边缘将被大大加强,轮廓更加明显,是一个很典型的sharp filter的效果。

关于Sobel算子与Scharr算子:

关于拉普拉斯(Laplacian)算子:

源代码示例:

import cv2 as cv
import numpy as npdef lapalian_demo(image):#dst = cv.Laplacian(image, cv.CV_32F)#默认为4领域拉普拉斯算子#lpls = cv.convertScaleAbs(dst)kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])#自定义的8领域拉普拉斯算子dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)lpls = cv.convertScaleAbs(dst)cv.imshow("lapalian_demo", lpls)def sobel_demo(image):#grad_x = cv.Sobel(image, cv.CV_32F, 1, 0)#grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#cv.Sobel的增强版,对噪声比较敏感grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)gradx = cv.convertScaleAbs(grad_x) #求绝对值并转化为8位的图像上grady = cv.convertScaleAbs(grad_y)cv.imshow("gradient-x", gradx)cv.imshow("gradient-y", grady)gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)cv.imshow("gradient", gradxy)src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
sobel_demo(src)
lapalian_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

运行结果:


关于canny边缘检測算子,细究的话比较的复杂,将在下一篇文章中具体介绍。

OpenCV+python:图像梯度相关推荐

  1. 12、OpenCV Python 图像梯度

    1 __author__ = "WSX" 2 import cv2 as cv 3 import numpy as np 4 5 def lapalian_demo(image): ...

  2. python怎么计算图像梯度_opencv python图像梯度实例详解

    这篇文章主要介绍了opencv python图像梯度实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一阶导数与Soble算子 二阶导数与拉普 ...

  3. pythonopencv读取图像属性_2、OpenCV Python 图像属性获取

    __author__ = "WSX" import cv2 as cv import numpy as np image = cv.imread("1.JPG" ...

  4. Python+OpenCV:图像梯度

    Python+OpenCV:图像梯度(Image Gradients) 理论 OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel, Scharr和Laplacian. 1. Sobel和S ...

  5. OpenCV之图像梯度

    1. Sobel算子 OpenCV系列-本文底页有多个常用方法链接 1.1 Sobel介绍 cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth:图像的深度 dx和 ...

  6. 基于OpenCV的图像梯度与边缘检测!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:姚童,Datawhale优秀学习者,华北电力大学 严格的说,梯度计 ...

  7. opencv 梯度幅值_基于OpenCV的图像梯度与边缘检测!

    严格的说,梯度计算需要求导数.但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值.图像梯度表示的是图像变化的速度,反映了图像的边缘信息. 边缘是像素值快速变化的地方.所以对于图像的边缘部分,其灰 ...

  8. OpenCV之图像梯度(笔记11)

    编程代码: import numpy as np import matplotlib.pyplot as plt import cv2 #图像梯度 def show(image):plt.imshow ...

  9. 【OpenCV】图像梯度处理

    使用Sobel算子: cv2.Sobel(图像对象,图像深度,水平方向(dx),竖直方向(dy),Sobel算子大小) 图像深度:通常设为'-1',表示输入与输出的图像深度保持一致. 水平方向:若选择 ...

  10. opencv python 图像形态学操作/图像腐蚀/图像膨胀/开运算/闭运算/顶帽/黑帽

    Morphological Transformations 1图像腐蚀 腐蚀的基本思想:侵蚀前景物体的边界(总是试图保持前景为白色):内核在图像中滑动(如在2D卷积中).只有当内核下的所有像素都是1时 ...

最新文章

  1. 通过身份证号提取性别_身份证号提取生日、年龄、性别、籍贯,最简单的方法!...
  2. Android消息机制Handler用法
  3. HttpSession常见问题
  4. Mybatis --- SelectKey
  5. TouTiao开源项目 分析笔记7 加载数据的过程
  6. python中的库及module的 路径
  7. Linux kernel 同步机制(下篇)
  8. 在组策略中用户策略仅对特定计算机生效,将组策略应用到满足条件的计算机---配置组策略筛选...
  9. C语言中volatile关键字与汇编__volatile__
  10. Visual C++ 6.0 简体中文企业版
  11. 《OpenCV3编程入门》学习笔记九:直方图与匹配
  12. 基础篇:6.4)形位公差-符号 Symbol
  13. 关于Vue单页面应用的首屏加载优化
  14. MHL技术介绍及接口检测原理
  15. 用Andriod studio学习制作APP
  16. 【Unity3D日常开发】Unity中的资源加载与文件路径
  17. 鸿蒙阴阳星辰塔,第1298章鸿蒙星辰塔的新能力
  18. Framebuffer子系统【转】
  19. 给电脑重装系统后Win11如何重置记事本?
  20. 毕设教程:基于嵌入式Linux和Qt实现的视频监控系统(Arm/树莓派/jetson)

热门文章

  1. Redis 难题突破,最经典 46 题含详细解析
  2. python 虚拟环境 tensorflow GPU
  3. LeetCode简单题之长度为三且各字符不同的子字符串
  4. JIT Code Generation代码生成
  5. Linux实现ffmpeg H.265视频编码
  6. 人工智能在音频链中找到自己的声音
  7. Camera HDR Algorithms
  8. 2021年大数据ELK(二十一):Logstash简介和安装
  9. 2021年大数据Flink(十六):流批一体API Connectors ​​​​​​​​​​​​​​Redis
  10. HarmonyOS shape 的使用