OpenCV入门(十三)快速学会OpenCV 12 图像梯度
迪丽瓦拉
2025-05-28 14:19:43
0次

OpenCV入门(十三)快速学会OpenCV 12 图像梯度

  • 1.Sobel算子
    • 1.1 计算x
    • 1.2 计算y
    • 1.3 计算x+y
  • 2.Scharr算子
    • 2.1 计算x
    • 2.2 计算y
    • 2.3 计算x+y
  • 3.Laplacian算子
  • 4.总结

图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情况下,图像梯度计算的是图像的边缘信息。

作者:Xiou

测试原图:

在这里插入图片描述

1.Sobel算子

Sobel算子是一种离散的微分算子,该算子结合了高斯平滑和微分求导运算。该算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。

Sobel 算子 (Sobel operator) 是边缘检测中非常重要的一个算子.。Sobel 算子是一类离散性差分算子, 用来运算图像高亮度函数的灰度之近似值。

OpenCV内,使用函数cv2.Sobel()实现Sobel算子运算,其语法形式为:

cv2.Sobel(src, ddepth, dx, dy, ksize)

参数:

src: 原图
ddepth: 图片深度
dx: 水平方向
dy: 竖直方向
ksize: 算子大小

1.1 计算x

代码实例:

import cv2
# 读取图片
img = cv2.imread("test.jpg")# Sobel算子
sobelx = cv2.Sobel(img, -1, 1, 0, ksize=3)# 展示图片
cv2.imshow("sobelx", sobelx)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

在这里插入图片描述

1.2 计算y

代码实例:

import cv2
# 读取图片
img = cv2.imread("test.jpg")# Sobel算子
sobely = cv2.Sobel(img, -1, 0, 1, ksize=3)# 展示图片
cv2.imshow("sobely", sobely)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

在这里插入图片描述

1.3 计算x+y

代码实例:

import cv2
# 读取图片
img = cv2.imread("test.jpg")# Sobel算子
sobel = cv2.Sobel(img, -1, 1, 1, ksize=3)# 展示图片
cv2.imshow("sobel", sobel)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:

在这里插入图片描述

2.Scharr算子

在离散的空间上,有很多方法可以用来计算近似导数,在使用3×3的Sobel算子时,可能计算结果并不太精准。OpenCV提供了Scharr算子,该算子具有和Sobel算子同样的速度,且精度更高。可以将Scharr算子看作对Sobel算子的改进。

OpenCV提供了函数cv2.Scharr()来计算Scharr算子,其语法格式如下:

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

式中:
● dst代表输出图像。
● src代表原始图像。
● ddepth代表输出图像深度。该值与函数cv2.Sobel()中的参数ddepth的含义相同。
● dx代表x方向上的导数阶数。
● dy代表y方向上的导数阶数。
● scale代表计算导数值时的缩放因子,该项是可选项,默认值是1,表示没有缩放。● delta代表加到目标图像上的亮度值,该项是可选项,默认值为0。
● borderType代表边界样式。

2.1 计算x

代码实例:

import cv2
# 读取图片
img = cv2.imread("test.jpg")# Scharr 算子
Scharrx = cv2.Sobel(img, -1, 1, 0, ksize=-1)# 展示图片
cv2.imshow("Scharrx",Scharrx)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述

2.2 计算y

代码实例:

import cv2
# 读取图片
img = cv2.imread("test.jpg")# Scharr 算子
Scharry = cv2.Sobel(img, -1, 0, 1, ksize=-1)# 展示图片
cv2.imshow("Scharry",Scharry)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述

2.3 计算x+y

需要注意的是,参数dx和dy的值不能都为1。

代码实例:

import cv2
# 读取图片
o = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(o, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(o, cv2.CV_64F, 0, 1)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
cv2.imshow("original", o)
cv2.imshow("xy", scharrxy)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果:
在这里插入图片描述

3.Laplacian算子

Laplacian(拉普拉斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同方向的图像边缘锐化(边缘检测)的要求。通常情况下,其算子的系数之和需要为零。

OpenCV内使用函数cv2.Laplacian()实现Laplacian算子的计算,该函数的语法格式为:

        dst = cv2.Laplacian( src, ddepth[, ksize[, scale[, delta[, borderType]]]] )

式中:
● dst代表目标图像。
● src代表原始图像。
● ddepth代表目标图像的深度。
● ksize代表用于计算二阶导数的核尺寸大小。该值必须是正的奇数。
● scale代表计算Laplacian值的缩放比例因子,该参数是可选的。默认情况下,该值为1,表示不进行缩放。
● delta代表加到目标图像上的可选值,默认为0。
● borderType代表边界样式。

代码实例:

import cv2
# 灰度读取图片
o = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
#拉普拉斯算子
Laplacian = cv2.Laplacian(o, cv2.CV_64F)
Laplacian = cv2.convertScaleAbs(Laplacian)
cv2.imshow("original", o)
cv2.imshow("Laplacian", Laplacian)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果:

在这里插入图片描述

4.总结

Sobel算子、Scharr算子、Laplacian算子都可以用作边缘检测,它们的核如图所示。

在这里插入图片描述
Sobel算子和Scharr算子计算的都是一阶近似导数的值。通常情况下,可以将它们表示为:

在这里插入图片描述
式中“|左-右|”表示左侧像素值减右侧像素值的结果的绝对值,“|下-上|”表示下方像素值减上方像素值的结果的绝对值。Laplacian算子计算的是二阶近似导数值,可以将它表示为:

在这里插入图片描述
通过公式可以发现,Sobel算子和Scharr算子各计算了一次“|左-右|”和“|下-上|”的值,而Laplacian算子分别计算了两次“|左-右|”和“|下-上|”的值。

相关内容

热门资讯

GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...
从三阳村出发,到双阳村接山泉水... 这天我从银桥镇三阳村出来后,下一站便是它旁边的双阳村路边取水点,按照之前所做的功课,其实只要导航到某...
国庆假期宁德文旅综合消费增长6... 东南网10月9日讯(本网记者 叶伏国 通讯员 周俊因)记者从宁德市文旅局获悉,今年国庆假期,全市文旅...
会网球懂摄影,一名合格的民宿管... 刚刚结束的国庆假期,各地特色文旅热度高涨。有这样一群民宿管家,他们无暇出门度假,却以贴心细致的守候为...
魔都乡趣 乡当有趣丨杉林溪涧寻... 足不出“沪”,就能邂逅森系溪谷秘境?国庆假期,位于闵行区浦江郊野公园活力森林区的“浸想森林”火出圈。...
【甘快看•文化中国行】文博“站... 国庆假期,嘉峪关方特游人如织。文博场馆内,非遗技艺可看可感;山野村落间,田园风光令人心旷神怡;城市街...
江畔开演,嗦粉迎客!四川南充国... 封面新闻记者 刘彦君10 月 7 日,四川南充国庆假期文旅成绩单正式出炉:全市A级景区接待游客322...