9.2 sobel算子及其函数使用
点击此处返回总目录 这节介绍Sobel算子的函数及使用。 1. Sobel函数介绍 1.1 参数ddepth ddepth指 处理结果图像深度。通常情况下,可以将该参数的值设置为-1, 让处理结果与原始图像保持一致。 但是在处理的时候,我们不采用通常的情况,也就是不写为-1。为什么呢? 如图,在计算图中黑色块位置的左右边界的Sobel算子的时候,左边界A处右边 - 左边 = -255,右边界B处 右边 - 左边 = 255。 针对-255(左边界A),因为图像像素值为0-255,所以要对-255进行处理。 一般有两种处理结果: (1)处理为0。处理为0之后就变成黑色了,如右边上图所示,就看不出来了。因此这种方法只能计算出右边界。 (2)取绝对值变成255。如右边下图所示,可以看到左右边界。我们一般采用这种方式。 在垂直方向上是同样的道理: 如果将-255处理为0,那只能得到下边界的值,得不到上边界的值。 基于上面的考虑,ddepth就不要写成-1了(-1就是指使用np.uint8,当出现负数的时候np.uint8会将负数处理为0),而是使用cv2.CV_64F,这样就能够保留-255了。 还有一个问题,既然保留了负数的值,还要变成绝对值才行。我们再使用下面的函数将负数的值变成256色位图。 后面两个参数我们不用,只用第一个就行了。 1.2 参数dx、dy 如果要计算x轴方向的边界,则dx = 1, dy = 0 如果要计算y轴方向的边界,则dx = 0, dy = 1 实际上,计算x方向的梯度,使用的是下面的卷积核: 计算y轴方向的梯度,使用的是下面的卷积核: 以上是分别计算x和y方向的梯度,但我们在计算sobel算子的时候,要用到x和y的梯度。有两种方式来计算: 第一种方式,设为1,1。这种方式不太严谨,我们更多的是使用第二种方式。 第二种方式,分别计算,然后相加dst = dx + dy。当然为了使得像素值不超过255,一般加一个系数。比如,dst = dx * 0.5 + dy * 0.5。 当然,我们不需要自己加,opencv提供了一个函数addWeighted()。 具体的计算就是: 比如: 1.3 参数kernel 核我们一般不用,不用就表示是3。如果用的话,可以设成一个奇数。 3的意思就是3行3列的卷积核。 2. Sobel函数的使用 例1:使用默认值-1,只能得到右边界 1,0表示计算x轴方向的梯度。-1表示使用np.uint8类型,这样就会把负数处理为0,从而导致左边界显示不出来。 结果: 例2:不使用默认值了,但是还是不行 结果: 不使用默认值-1了,但是结果还是只有右边界。要想出现左边界,怎么办呢?还要取绝对值。 例3:正确的得到水平边界的方法 结果: 这样左右边界就都有了。 例4:正确地得到垂直边界的方法 同理,可以求垂直方向上的梯度。 结果: 例5:正确地计算sobel算子 结果: 可以看到,把边界都计算出来了。 例6: 我们再来对比一下,两种方式计算sobel算子有什么不同。 结果: 我们可以看到最后的结果,使用方式一,不能很好的提取边界信息。 注意:我们使用别的图像,使用方式一也能得到边界,但是得到的边界不完整,这样就会导致错误,比如: |
9.2 sobel算子及其函数使用相关推荐
- opencv学习笔记16:梯度运算之scharr算子及其函数使用
前文介绍了sobel算子 opencv学习笔记14:sobel算子及其函数使用 scharr算子理论 系数和sobel不一样,其他一样. scharr函数使用 dst=cv2.Scharr(src,d ...
- OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)
目录 一.边缘检测基础理论 1.作用: 2.分类 1.基于搜索 2.基于零穿越 3.算子比较 二.Sobel算子基础理论 1.作用 2.原理及推导 3.更详细推导 4.Sobel函数 二.实战 1.对 ...
- Sobel算子及cvSobel
转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法. 首先,我们来开一下计算 ...
- 【OpenCV 4开发详解】Sobel算子
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- 计算机视觉开源库OpenCV梯度之Sobel算子
Sobel算子是像素图像边缘检测中最重要的算子之一,在机器学习.数字媒体.计算机视觉等信息科技领域起着举足轻重的作用.在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值.在图 ...
- sobel算子原理以及运用
Sobel边缘检测算法: 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量 Sobel卷积因子为: ...
- OpenCV-Python教程(6)(7)(8): Sobel算子 Laplacian算子 Canny边缘检测
OpenCV-Python教程(6.Sobel算子) 本篇文章介绍如何用OpenCV-Python来使用Sobel算子. 提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Pyth ...
- OpenCV图像处理使用笔记(八)——Sobel算子
前言 前面博客讲了矩阵之间的卷积操作,在图像处理中,使用一些标准的模板的卷积核与原图像进行运算,可以改变像素强度,从而影响周围其他像素的强度,常用于图像模糊.锐化及边缘检测等. Sobel算子 1.S ...
- sobel算子_OpenCV 学习:4 Sobel算子
1 背景介绍 图像底层的处理对象,比如图像的噪点.边缘.直线.圆.特征点等为目的.那么本章主要解决的问题是如何提取图形中的边缘?是我们关心中的重点.那么,其数学原理是一阶离散差分的形式.故我们知道把一 ...
最新文章
- cv2 orb 图像拼接_OpenCV 实现多张图像拼接
- Newlife.Net QA
- javaScript获取url中的参数
- 初识-Android之智能短信项目相关技术整理
- POJ2481-Cows【树状数组】
- Objects.requireNonNull 方法说明
- C++引用和指针区别
- 【前沿方案】华为自动驾驶网络解决方案.pdf(附80页pdf下载链接)
- 【笔记】Java 信任所有SSL证书(解决PKIX path building failed问题)
- 树线段hdu 4508 美素数(线段树)
- 【15年浙江省赛 C ZOJ 3871】Convex Hull【极角排序】
- laravel 下载使用
- linux安装2870无线网卡,告诉你Ubuntu 12.04下RT5370无线网卡驱动安装的方法及命令
- 10年涨7倍!纵观南京房价变迁史,看哭多少买房人!
- 转:有关Forth语言
- BUUCTF:[XMAN2018排位赛]通行证
- 微信分享中将链接图标替换成自定义图片的实例
- 帮我写一份情书给在一起200天的女朋友,要求1000字
- java中flush函数作用_Java语言中flush()函数作用及使用方法详解
- 灰狼优化算法(GWO)附代码