• 形态学梯度:膨胀减去腐蚀
  • 图像梯度:指边缘处产生的,常指二值图像中的黑白处。

dst = cv2.Sobel(src, ddepth, dx, dy, ksize)-----------白减去黑,或者黑减去白

  • ddepth:图像的深度,一般会写CV_64F,可以出现负数
  • dx和dy分别表示水平和竖直方向,水平:1,0(右边减左边);竖直:0,1(下面减上面);
  • ksize是Sobel算子的大小

两个方向的sobel算子如下所示,我们采用模板对原图像进行卷积运算,即某处的像素的8邻域的9个像素值分别与sobel算子进行相乘再加和得到该处的像素值,通过观察可知,Gx就是该像素右边的三个相邻像素减去左边的三个相邻像素,Gy就是上面的三个相邻像素减去下面的三个相邻像素。为什么有的是2,有的是1呢?这是因为sobel算子将与目标像素距离近的相邻像素(横着竖着方向)权值设为2,距离远的(斜着的对角线)设置为1,认为距离远的影响小,距离近的影响大。



原图:

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)

白到黑是正数,黑到白就是负数了,所有的负数opencv默认会被截断成0,所以要取绝对值

(若不取绝对值,那么黑到白会是负数,opencv默认处理为0,图像此处边缘就无法显示。只显示一边的边缘,如上图)

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)  -------------取绝对值

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)  -------------取绝对值

分别计算x和y,再求和

sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)

不建议直接计算,如果像下面直接计算(直接写1,1),产生的梯度会不太连续,不如分开再加和效果好。(如下图)

sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
sobelxy = cv2.convertScaleAbs(sobelxy)

完整代码:

import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inlinedef cv_imshow(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
#分开计算再相加
img =cv2.imread('F://from 2to7 notebook//images//lena.jpg')
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx=cv2.convertScaleAbs(sobelx)
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely=cv2.convertScaleAbs(sobely)
sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_imshow('sobelxy',sobelxy)
#直接计算水平与竖直方向
sobelxy1=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
sobelxy1=cv2.convertScaleAbs(sobelxy1)
cv_imshow('sobelxy1',sobelxy1)

图像梯度-Sobel算子相关推荐

  1. OpenCV--033_2: 图像梯度--Sobel算子

    索贝尔算子(Sobel operator) 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. So ...

  2. OpenCV-Python图像梯度 Sobel算子

    图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小 Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算. 该算子利用局部差寻 ...

  3. 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子

    [OpenCV 例程200篇]64. 图像锐化--Sobel 算子 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3 ...

  4. python-opencv之图像梯度Sobel、Scharr、Laplacian算子边缘检测

    Sobel算子 是离散微分算子(discrete differentiation operator),用来计算图像灰度的近似梯度,梯度越大越有可能是边缘. Soble算子的功能集合了高斯平滑和微分求导 ...

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

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

  6. 数字图像处理:(1)图像梯度以及算子应用

    1.数学意义上的梯度 在理解图像梯度是什么的时候,我们首先要回忆一下以前学习过得梯度是什么? 见链接: https://blog.csdn.net/m0_37957160/article/detail ...

  7. 11-图像梯度-Sobel算子

    图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化.Y轴的变化 . 其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1 ...

  8. [转]图像梯度:算子

    0 定义 本质上是用于卷积运算的模板,最终效果上是求得梯度.Roberts 算子,Sobel算子.Prewitt算子以及Laplace算子等.按功能分,上述算子都是求边缘检测的算子.如果按求导的阶数分 ...

  9. matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现

    <基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...

  10. OpenCV 图像梯度 Sobel、Scharr、Laplacian

    概念: 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的.斜方向的等等),所需要的无非也是一个核模板,模板的不同结果也不同.所以可以看到,所有的这些个算子函数,归结到底 ...

最新文章

  1. python中“SimpleITK”模块完美快速安装
  2. windows10安装Oracle提示错误-INS-13001环境不满足最低要求
  3. 题解西电OJ (Problem 1008 - 数星星)
  4. jdk8 calendar_JDK 8的Calendar.Builder
  5. 飞畅科技-工业级POE交换机解决方案专家
  6. mysql mgr 配置_MySQL5.7 MGR安装配置
  7. pcb天线和纯铜天线_如何简化天线设计?相控阵波束成形IC来助您
  8. python学习—python中的引用本质
  9. SQL解析利器General SQL Parser
  10. 【简报】超棒的免费Web字体服务:Adobe Edge Web字体
  11. 数据库基础(2)选择,投影,连接,除法运算
  12. 2018年值得推荐的20个Bootstrap网站模板
  13. Latex下载和使用
  14. 混沌理论作业简析——两人一组_图像加密解密小游戏
  15. BulletProof vs snark vs stark性能对比
  16. 微信、网站、APP相关分享
  17. 蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
  18. ewebeditor***
  19. gitlab修改附件上传文件大小限制
  20. java8 四大函数式接口 和 用于数据处理的 stream流 使用详解

热门文章

  1. 解决 https 证书验证不通过的问题
  2. VMware vSphere Update Manager 5.0
  3. 开机出现grub rescue
  4. 让人死去活来的cocos2d-x安卓开发环境搭建(windows+eclipse+ndk 不用cygwin)【上图】
  5. Spring3开发实战 之 第四章:对JDBC和ORM的支持
  6. 我的计时软件TimeDogV13
  7. Can I Delete Administrative Shares (e.g. C$) in Windows?
  8. [转]Linux 基本操作(RM 删除)
  9. 假设法求最大值和数组的优点
  10. Mysql --- 索引