Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,但是很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是效率要求较高,而对细纹理不太关心的时候。

Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)
  • src:传入的图像

  • ddepth: 图像的深度

  • dx和dy: 指求导的阶数,0表示这个方向上没有求导,取值为0、1。

  • ksize: 是Sobel算子的大小,即卷积核的大小,必须为奇数1、3、5、7,默认为3。

    注意:如果ksize=-1,就演变成为3x3的Scharr算子。

  • scale:缩放导数的比例常数,默认情况为没有伸缩系数。

  • borderType:图像边界的模式,默认值为cv2.BORDER_DEFAULT。

Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。处理完图像后,再使用cv2.convertScaleAbs()函数将其转回原来的uint8格式,否则图像无法显示。

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

Scale_abs = cv2.convertScaleAbs(x)  # 格式转换函数
result = cv2.addWeighted(src1, alpha, src2, beta) # 图像混合
import cv2 as cv
from matplotlib import pyplot as plt
# 1 读取图像
img = cv.imread('./1.png', 0)# 2.1 计算Sobel卷积结果
x1 = cv.Sobel(img, cv.CV_16S, 1, 0)  # x轴求导
y1 = cv.Sobel(img, cv.CV_16S, 0, 1)  # y轴求导# 2.2 计算Scharr卷积结果
x2 = cv.Sobel(img, cv.CV_16S, 1, 0, ksize=-1)
y2 = cv.Sobel(img, cv.CV_16S, 0, 1, ksize=-1)# 3.1 将Sobel数据结果进行转换
Scale_absX1 = cv.convertScaleAbs(x1)  # convert 转换  scale 缩放
Scale_absY1 = cv.convertScaleAbs(y1)# 3.2 将Scharr数据结果进行转换
Scale_absX2 = cv.convertScaleAbs(x2)  # convert 转换  scale 缩放
Scale_absY2 = cv.convertScaleAbs(y2)# 4.1 Sobel转换后结果合成
result1 = cv.addWeighted(Scale_absX1, 0.5, Scale_absY1, 0.5, 0)# 4.2 Scharr转换后结果合成
result2 = cv.addWeighted(Scale_absX2, 0.5, Scale_absY2, 0.5, 0)# 5. 图像显示
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100)
axes[0].imshow(img, cmap=plt.cm.gray)
axes[0].set_title("原图")
axes[1].imshow(result1, cmap=plt.cm.gray)
axes[1].set_title("Sobel滤波后结果")
axes[2].imshow(result2, cmap=plt.cm.gray)
axes[2].set_title("Scharr滤波后结果")
plt.show()


上述代码中计算sobel算子的部分中将ksize设为-1,就是利用Scharr进行边缘检测。

x = cv.Sobel(img, cv.CV_16S, 1, 0, ksize=-1)
y = cv.Sobel(img, cv.CV_16S, 0, 1, ksize=-1)

OpenCV Sobel检测算子和Scharr检测算子相关推荐

  1. 图像梯度——Sobel算子和Laplacian算子

    一.Sobel算子 1.定义 Sobel算子是一种离散的微分算子,结合了高斯平滑和微分求导运算,利用局部拆分寻找边缘,计算所得的是一个梯度的近似值. Sobel算子=|左-右|/|下-上| Schar ...

  2. OpenCV Sobel和Scharr (索贝尔和夏尔滤波器检测边缘)

    ::返回OpenCV算子速查表 OpenCV Sobel和Scharr 1. 函数定义 1.1 声明 1.2 重要参数解析 2. 例程 2.1 处理效果 原图 在x,y方向分别求导 如果两个方向一起求 ...

  3. [Python图像处理] 十八.图像锐化与边缘检测之Scharr算子、Canny算子和LOG算子

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. python高斯滤波和降噪_python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子...

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...

  5. 边缘提取——Prewitt算子和Sobel算子

    目录 Prewitt算子和Sobel算子 理论介绍 编码实现(Python) debug过程 Prewitt算子和Sobel算子 理论介绍 Prewitt算子和Sobel算子也是基于一阶导数的算子. ...

  6. 图像的常规边缘检测(梯度算子、Roberts算子和Sobel算子)之c++实现(qt + 不调包)

    1.基本原理 边缘检测一般是利用微分等方法,通过对灰度跃变的分析寻找图像上区域边缘的技术.今天的猪脚是梯度算子和Roberts算子. 1.梯度算子是怎么来的? 答:图像是一个二维集合,在(x, y)处 ...

  7. 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  8. OpenCv入门(六)——几何检测

    目录 0x01 了解霍夫变换 0x02 线检测技术 0x03 LSD快速直线检测 0x04 圆检测技术 0x05 轮廓检测 0x01 了解霍夫变换 霍夫变换是要从图像钟识别几何形状的基本图像处理方法之 ...

  9. 【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化. ...

最新文章

  1. 解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
  2. 中间层通讯 Socket? Remoting? WCF?
  3. Python 或将成为法国高中的官方编程教学语言
  4. 264中 POC的计算方法
  5. WBOLT 搜索推送管理插件(原百度推送管理插件) 3.4.11 Pro
  6. 用 LSTM 做时间序列预测的一个小例子
  7. Ionic 4.0.2 发布,移动应用开发框架
  8. vue.js axios实现跨域http请求接口
  9. 深度相机---(2)结构光深度测距
  10. oracle用户口令已失效
  11. 卡盟主站搭建_搭建卡盟主站下载|搭建卡盟主站教程 (附带源码)百度云_ - 极光下载站...
  12. 欢迎空心字怎么写_春节快乐空心字怎么写
  13. PC传输图片到Hololens
  14. Origin双坐标轴图表
  15. c mysql创建索引,如何创建mysql索引
  16. 系统架构师(一)选择题
  17. 人工智能写作产品解决的痛点
  18. 基于北斗导航定位系统的设计与实现(论文+程序设计源码+数据库文件)
  19. 【happyz】MATLAB-FM仿真01
  20. VS2015安装失败——系统找不到指定路径

热门文章

  1. 综合一2017.5.17
  2. PAL算法原理及代码实现
  3. 关于DJANGO和JAVASCRIPT的时间
  4. 安徽工业大学工商学院计算机,发个帖子(对计算机学弟学妹们的建议)
  5. MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
  6. mac 10.9.5 安装hadoop 1.2.1 运行wordcount
  7. 后台开发经典书籍--mysql从入门到精通
  8. 买卖股票的最佳时机|||
  9. springmvc一:编写简单的HelloWorld
  10. vue[源码]你不知道的observe!