OpenCV图像梯度——Scharr算子(cv2.Scharr())
Scharr算子
在离散的空间上,有很多方法可以用来计算近似导数,在使用 3×3 的 Sobel 算子时,可能计算结果并不太精准。OpenCV 提供了 Scharr 算子,该算子具有和 Sobel 算子同样的速度,且精度更高。可以将 Scharr 算子看作对 Sobel 算子的改进,其核通常为:
OpenCV 提供了函数 cv2.Scharr()来计算 Scharr 算子,其语法格式如下:
dst = cv2.Scharr( src, ddepth, dx, dy[, scale[, delta[, borderType]]] )
其中:
dst 代表输出图像。
src 代表原始图像。
ddepth 代表输出图像深度。该值与函数 cv2.Sobel()中的参数 ddepth 的含义相同。
dx 代表 x 方向上的导数阶数。
dy 代表 y 方向上的导数阶数。
scale 代表计算导数值时的缩放因子,该项是可选项,默认值是 1,表示没有缩放。
delta 代表加到目标图像上的亮度值,该项是可选项,默认值为 0。
borderType 代表边界样式。
函数 cv2.Scharr()和函数 cv2.Sobel()的使用方式基本是一致的。需要注意的是,参数 ddepth 的值应该设置为“cv2.CV_64F”,并对函数 cv2.Scharr()的计算结果取绝对值,才能保证得到正确的处理结果。具体语句为:
dst=Scharr(src, cv2.CV_64F, dx, dy)
dst= cv2.convertScaleAbs(dst)
示例:
使用函数 cv2.Scharr()获取图像水平方向的边缘信息。
import cv2
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
scharrx = cv2.convertScaleAbs(scharrx) # 转回uint8
cv2.imshow("original",o)
cv2.imshow("x",scharrx)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果:
使用函数 cv2.Scharr()获取图像垂直方向的边缘信息。
import cv2
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
scharry = cv2.convertScaleAbs(scharry)
cv2.imshow("original",o)
cv2.imshow("y",scharry)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果:
使用函数 cv2.Scharr()实现水平方向和垂直方向边缘叠加的效果。
import cv2
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx) # 转回uint8
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
cv2.imshow("original",o)
cv2.imshow("xy",scharrxy)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果:
OpenCV图像梯度——Scharr算子(cv2.Scharr())相关推荐
- OpenCV图像梯度(Sobel和Scharr)
OpenCV图像梯度(Sobel和Scharr) 1 图像梯度是什么? 2 图像梯度的用途 3 图像梯度的使用 参考 这篇博客将介绍图像渐变以及如何使用OpenCV的cv2.Sobel计算Sobel渐 ...
- OpenCV——图像梯度与边缘检测(python实现)
OpenCV--图像梯度与边缘检测 6.1 简介 严格的说,梯度计算需要求导数.但是图像梯度的计算,是通过计算像素值的差得到梯度的近似值.图像梯度表示的是图像变化的速度,反映了图像的边缘信息. 边缘是 ...
- OpenCV 图像梯度 Sobel、Scharr、Laplacian
概念: 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的.斜方向的等等),所需要的无非也是一个核模板,模板的不同结果也不同.所以可以看到,所有的这些个算子函数,归结到底 ...
- OpenCV 图像梯度 :cv2.Sobel(),cv2.Schar(),cv2.Laplacian() + 数据类型设置:cv2.CV_8U,cv2.CV_16S,cv2.CV_64F
原理: 梯度本质上就是导数.OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和Laplacian.Sobel,Scharr 其实就是求一阶或二阶导数.Scharr ...
- OpenCV图像梯度算子
梯度简单来说就是求导. OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian. Sobel,Sc ...
- 基于Python的Opencv图像梯度处理
图像梯度直观反应其实就是图像当中各物体的轮廓,而在像素点上的体现其实就是相邻像素点之间的差值,差值越大,轮廓就会越清晰(可用于图像增强),而Opencv提供了以下三种算子来进行图像的梯度处理,跟在之前 ...
- opencv 图像梯度(python)
图像梯度 图像梯度 Sobel理论基础 计算水平方向偏导数的近似值 计算垂直方向偏导数的近似值 Sobel算子及函数使用 注意点:参数ddepth 方向 计算x方向和y方向的边缘叠加 Scharr算子 ...
- 数字图像处理:(1)图像梯度以及算子应用
1.数学意义上的梯度 在理解图像梯度是什么的时候,我们首先要回忆一下以前学习过得梯度是什么? 见链接: https://blog.csdn.net/m0_37957160/article/detail ...
- OpenCV--033_2: 图像梯度--Sobel算子
索贝尔算子(Sobel operator) 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. So ...
- OpenCV-Python图像梯度 Sobel算子
图像的梯度计算的是图像变化的速度,对于边缘部分呢灰度值变换大,梯度值也大,相反则灰度值变化小,梯度值小 Sobel算子是一种离散的微分算子,该算子结合了高斯平滑处理和微分求导运算. 该算子利用局部差寻 ...
最新文章
- android imageview 的常用属性,android imageview scaletype属性
- Git环境搭建及简单的本地、远程 两库关联
- 软件开发项目进度控制浅谈
- 隐藏层节点数对迭代次数分布规律的影响
- [react] 说说你对windowing的了解
- 怎么快速搜索服务器里的文件,使用 Everything,快速搜索电脑文件,制作局域网资料搜索器 | 科技搜...
- 信息学奥赛一本通(1126:矩阵转置)
- 使用 lsof 代替 Mac OS X 中的 netstat 查看占用端口的程序
- python数据文件格式p_python对NOAA天气数据格式转换
- java 父类 new 子类
- 剑指offer——35复杂链表的复制
- ICPC程序设计题解书籍系列之六:吴永辉:《算法设计编程实验》
- 微软认知语音服务 语音识别
- sqoop和sqoop2区别
- [C#] 控制系统音量-第一章
- Linux零基础入门系列培训
- 160813_qt显示阿拉伯输入法9x7点阵
- 微星主板rgb_微星10款B550主板集体发布:标配PCIe 4.0、支持Zen3
- Python实现Local Reed-Xiaoli(LRX)高光谱目标检测算法
- ffmpeg 转换flv压缩大小_ffmpeg 视频压缩 转换