OpenCV-Python (Sobel算子)[通俗易懂]

OpenCV-Python (Sobel算子)[通俗易懂]Sobel算子Sobel算子的基本概念Sobel算子是一个主要用于边缘检测的离散微分算子(discretedifferentiationoperator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。在图像的任意一点使用此算子,都将会产生对应的梯度矢量或是其法矢量。原型Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Pyt…

大家好,又见面了,我是你们的朋友全栈君。

Sobel算子

Sobel算子的基本概念

          Sobel算子是一个主要用于边缘检测的离散微分算子(discrete differentiation operator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。在图像的任意一点使用此算子,都将会产生对应的梯度矢量或是其法矢量。

原型

Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,使用Sobel的算子的函数原型如下:

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

 函数返回其处理结果。

前四个是必须的参数:

  • 第一个参数是需要处理的图像;
  • 第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
  • dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。

使用

在OpenCV-Python中,Sobel函数的使用如下:

import cv2
import numpy as np

img = cv2.imread("D:/gui.jpg", 0)

x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)

absX = cv2.convertScaleAbs(x) # 转回unit8
absY = cv2.convertScaleAbs(y)

dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

cv2.imshow("absX", absX)
cv2.imshow("absY", absY)

cv2.imshow("Result", dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

效果图如下:

OpenCV-Python (Sobel算子)[通俗易懂]OpenCV-Python (Sobel算子)[通俗易懂]

OpenCV-Python (Sobel算子)[通俗易懂]OpenCV-Python (Sobel算子)[通俗易懂]

解释

在Sobel函数的第二个参数这里使用了cv2.CV_16S。因为OpenCV文档中对Sobel算子的介绍中有这么一句:“in the case of 8-bit input images it will result in truncated derivatives”。即Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。

在经过处理后,别忘了用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,而只是一副灰色的窗口。convertScaleAbs()的原型为:

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]])

其中可选参数alpha是伸缩系数,beta是加到结果上的一个值。结果返回uint8类型的图片。

由于Sobel算子是在两个方向计算的,最后还需要用cv2.addWeighted(…)函数将其组合起来。其函数原型为:

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

其中alpha是第一幅图片中元素的权重,beta是第二个的权重,gamma是加到最后结果上的一个值。

参考资料:

1、《Opencv2 Computer Vision Application Programming Cookbook》

2、《OpenCV References Manule》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158993.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • zencart包包模板

    zencart包包模板很适合包包,鞋子的一款模板,该zencart模板为成品网站该网站的zencart版本为zencart1.3.9h该安装的常用插件有:1、ultimateseourls2、CSS/JSLoader3、JQzoom放大镜4、RSSFeed5、FastandEasyCheckout6、ImageHandler37、EasyPop

  • 动态因果图模型_因果图是谁提出来的

    动态因果图模型_因果图是谁提出来的文章目录1.动态因果图模型1.1引言1.1.1信度网的应用与不足1.1.2因果图的优势1.2模型主要思想1.3模型的表达方式1.3.1因果图与故障诊断1.3.2因果图分类1.3.3因果图形式化表示1.3.4因果图的正规化1.4因果树1.4.1微因果树1.4.2因果树与因果图对比2.动态因果图推理2.1待求解问题的数学形式2.2割集2.2.1一阶割集2.2.2最终割集2.3因果图编译2.3.1逻辑解环2.3.2求最终割集式2.3.3求不交化割集2.4因果图计算简化2

  • 【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]

    【云原生 • Kubernetes】搭建 k8s 集群(Kubeadm 方式)[通俗易懂]kubeadm方式搭建k8s集群,包含详细步骤及解析。

    2022年10月15日
  • 二阶有源带通滤波器滤波原理[通俗易懂]

    二阶有源带通滤波器滤波原理[通俗易懂]转载增加:请注意有源滤波器因为运放的有效识别电压和响应频率的影响,适用于低频信号的滤波,对于高频信号最好使用无缘滤波。名词解释一阶低通滤波器,包含一组RC构成的滤波器,将谐波过滤一次;两阶低通滤波器,包含两组RC构成的滤波器,将谐波过滤两次。同理三阶滤波。。。。以下转载地址http://blog.sina.com.cn/s/blog_61144c49

  • 扩展欧几里得

    扩展欧几里得

  • pandas drop参数_pandas concat函数

    pandas drop参数_pandas concat函数pandas中dropna()参数详解DataFrame.dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)1.axis参数确定是否删除包含缺失值的行或列axis=0或axis=’index’删除含有缺失值的行,axis=1或axis=’columns’删除含有缺失值的列,importpandasaspdimportnumpyasnpdf=pd.DataFrame({“name”:[‘Alfr

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号