图像梯度-Sobel算子
- 形态学梯度:膨胀减去腐蚀
- 图像梯度:指边缘处产生的,常指二值图像中的黑白处。
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算子相关推荐
- OpenCV--033_2: 图像梯度--Sobel算子
索贝尔算子(Sobel operator) 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. So ...
- OpenCV-Python图像梯度 Sobel算子
图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小 Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算. 该算子利用局部差寻 ...
- 【OpenCV 例程200篇】64. 图像锐化——Sobel 算子
[OpenCV 例程200篇]64. 图像锐化--Sobel 算子 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3 ...
- python-opencv之图像梯度Sobel、Scharr、Laplacian算子边缘检测
Sobel算子 是离散微分算子(discrete differentiation operator),用来计算图像灰度的近似梯度,梯度越大越有可能是边缘. Soble算子的功能集合了高斯平滑和微分求导 ...
- 图像梯度——Sobel算子和Laplacian算子
一.Sobel算子 1.定义 Sobel算子是一种离散的微分算子,结合了高斯平滑和微分求导运算,利用局部拆分寻找边缘,计算所得的是一个梯度的近似值. Sobel算子=|左-右|/|下-上| Schar ...
- 数字图像处理:(1)图像梯度以及算子应用
1.数学意义上的梯度 在理解图像梯度是什么的时候,我们首先要回忆一下以前学习过得梯度是什么? 见链接: https://blog.csdn.net/m0_37957160/article/detail ...
- 11-图像梯度-Sobel算子
图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化.Y轴的变化 . 其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1 ...
- [转]图像梯度:算子
0 定义 本质上是用于卷积运算的模板,最终效果上是求得梯度.Roberts 算子,Sobel算子.Prewitt算子以及Laplace算子等.按功能分,上述算子都是求边缘检测的算子.如果按求导的阶数分 ...
- matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现
<基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...
- OpenCV 图像梯度 Sobel、Scharr、Laplacian
概念: 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的.斜方向的等等),所需要的无非也是一个核模板,模板的不同结果也不同.所以可以看到,所有的这些个算子函数,归结到底 ...
最新文章
- python中“SimpleITK”模块完美快速安装
- windows10安装Oracle提示错误-INS-13001环境不满足最低要求
- 题解西电OJ (Problem 1008 - 数星星)
- jdk8 calendar_JDK 8的Calendar.Builder
- 飞畅科技-工业级POE交换机解决方案专家
- mysql mgr 配置_MySQL5.7 MGR安装配置
- pcb天线和纯铜天线_如何简化天线设计?相控阵波束成形IC来助您
- python学习—python中的引用本质
- SQL解析利器General SQL Parser
- 【简报】超棒的免费Web字体服务:Adobe Edge Web字体
- 数据库基础(2)选择,投影,连接,除法运算
- 2018年值得推荐的20个Bootstrap网站模板
- Latex下载和使用
- 混沌理论作业简析——两人一组_图像加密解密小游戏
- BulletProof vs snark vs stark性能对比
- 微信、网站、APP相关分享
- 蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
- ewebeditor***
- gitlab修改附件上传文件大小限制
- java8 四大函数式接口 和 用于数据处理的 stream流 使用详解
热门文章
- 解决 https 证书验证不通过的问题
- VMware vSphere Update Manager 5.0
- 开机出现grub rescue
- 让人死去活来的cocos2d-x安卓开发环境搭建(windows+eclipse+ndk 不用cygwin)【上图】
- Spring3开发实战 之 第四章:对JDBC和ORM的支持
- 我的计时软件TimeDogV13
- Can I Delete Administrative Shares (e.g. C$) in Windows?
- [转]Linux 基本操作(RM 删除)
- 假设法求最大值和数组的优点
- Mysql --- 索引