本篇文章介绍如何用OpenCV-Python来使用Sobel算子。

提示:

  • 转载请详细注明原作者及出处,谢谢!
  • 本文介绍使用OpenCV-Python实现基本的滤波处理
  • 本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版) 》。

Sobel算子

原型

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

[python] view plaincopy
  1. dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

函数返回其处理结果。

前四个是必须的参数:

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

其后是可选的参数:

  • dst不用解释了;
  • ksize是Sobel算子的大小,必须为1、3、5、7。
  • scale是缩放导数的比例常数,默认情况下没有伸缩系数;
  • delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
  • borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。

使用

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

[python] view plaincopy
  1. #coding=utf-8
  2. import cv2
  3. import numpy as np
  4. img = cv2.imread("D:/lion.jpg", 0)
  5. x = cv2.Sobel(img,cv2.CV_16S,1,0)
  6. y = cv2.Sobel(img,cv2.CV_16S,0,1)
  7. absX = cv2.convertScaleAbs(x)   # 转回uint8
  8. absY = cv2.convertScaleAbs(y)
  9. dst = cv2.addWeighted(absX,0.5,absY,0.5,0)
  10. cv2.imshow("absX", absX)
  11. cv2.imshow("absY", absY)
  12. cv2.imshow("Result", dst)
  13. cv2.waitKey(0)
  14. cv2.destroyAllWindows()

解释

在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()的原型为:

[python] view plaincopy
  1. dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])

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

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

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

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

结果

原图像为:

结果为:

参考资料:

1、《Opencv2 Computer Vision Application Programming Cookbook》

2、《OpenCV References Manule》

如果觉得本文写的还可以的话,请轻点“顶”,您的支持是我写下去的动力之一。未完待续。。。如有错误请指正,本人会虚心接受并改正!谢谢!

OpenCV-Python教程(6、Sobel算子)相关推荐

  1. OpenCV Python教程(3)(4)(5): 直方图的计算与显示 形态学处理 初级滤波内

    OpenCV Python教程(3.直方图的计算与显示) 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途 ...

  2. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

  3. opencv python教程简书_OpenCV-Python系列二:常用的图像属性

    对于图像,我们经常需要知道关于图像的特殊属性,比如宽度,高度,面积,像素点数目等等,那么在opencv-python中,这些信息如何获取呢? 本文结构: 1.基本图像属性 2. 对于opencv中的特 ...

  4. OpenCV Python教程(1、图像的载入、显示和保存)

    本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...

  5. opencv python教程简书_OpenCV-Python教程:27.图像转换

    理论 傅里叶变换用来分析多种过滤器的频率特征.对于图片,2D离散傅里叶变换(DFT)用来找频率范围.一个快速算法叫快速傅里叶变换(FFT)用来计算DFT. 对于正弦信号,x(t) = Asin(2πf ...

  6. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...

  7. opencv python教程-OpenCV4 Python 最新中文版官方教程来了(附下载)

    教程简介 OpenCV 是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新 OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解 OpenCV 相关细节. ...

  8. OpenCV Python教程系列

    参考: OpenCV - sunny2038的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/sunny2038/article/category/904451

  9. opencv python教程简书_OpenCV-Python教程:28.模板匹配

    理论 模板匹配是在一个大图里搜索和找模板图像位置的方法.OpenCV有个函数cv2.matchTemplate()来做这个.它吧模板图像在输入图像上滑动,对比模板和在模板图像下的输入图像块.它返回了一 ...

  10. opencv python教程简书_OpenCV-Python教程:57.图像修复

    基础 你们可能家里都会有一些老照片已经有黑点啊,划痕啊等.你有想过修复它们么?我们不能简单的在绘图工具里把他们擦除了就完了.因为这样只是把黑色的东西变成白色的而已,实际上没用.在这种情况下,会用到一种 ...

最新文章

  1. FPGA之道(10)布线资源与接口资源
  2. Could not install packages due to an Environment Error: [Errno 13] Permission denied 解决方案
  3. qui ajax,Ajax Fils de T Lamon
  4. VTK:Math之PerpendicularVector
  5. Qt QML模块提供的重要C ++类
  6. 有人问我:AI这么火,要不要去追赶AI的热潮?
  7. UDT源码剖析(六):UDT::socket()过程代码注释
  8. sessionstorage ie8下跨页面_前端页面布局困难?教你用盒子模型一招解决
  9. java使用socket实现一个多线程web服务器
  10. 《码出高效---java》PDF,有学习java的小伙伴可以看看,阿里巴巴出版的书籍
  11. LTE-OA系统架构图
  12. 特征工程之特征选择(3)----F检验和互信息法
  13. 奇迹之剑萌新晋升大神辅助攻略 奇迹之剑游戏脚本挂机工具介绍
  14. 邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现
  15. 解决 filezilla 连接服务器失败问题
  16. opencv图像形态学运算
  17. 干货|科技赋能财富硬核直播带货,助力宜信财富逆势增长
  18. CSDN怎么在文章中生成目录
  19. 03-链表(Linked List)应用分析
  20. 2021年部分漏洞整合+检测工具

热门文章

  1. mysql编译安装后各种常见错误集锦
  2. chrome插件,脚本中实现跨域请求
  3. CCIE试验备考之交换VLAN间路由
  4. python的精髓_思维python2e的学习精髓(4):案例研究界面设计,ThinkPython2e,精粹,四,接口...
  5. linux目录分配独立磁盘空间,Linux 分配/home的磁盘空间给根目录
  6. 手把手教你python实现量价形态选股知乎_Python实现量化选股
  7. 【2019杭电多校第二场1009=HDU6599】I Love Palindrome String(回文树的fail树)
  8. php检索特定的关键字的函数,javascript、php关键字搜索函数的使用方法
  9. STM32——库函数版——数码管动态显示程序
  10. Seaborn绘制kdeplot和distplot