python+opencv图像处理(四十)

Sobel算子 

开头来张帅哥......

----------------------这是严谨的分割线--------------------------

1、Sobel算子(索贝尔算子)
Sobel算子是一种用于边缘检测的离散微分算子,主要用于获得数字图像的一阶梯度。
该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。
Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。
Sobel算子的边缘定位更准确,常用于噪声较多、灰度渐变的图像。
Sobel算子如下:
2、sobel函数实现
Sobel算子在opencv中自带了函数实现,函数参数含义如下:
dst = Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
其中,前四个是必须的参数:
src 表示输入图像;
ddepth 表示目标图像所需的深度,针对不同的输入图像,输出目标图像有不同的深度,-1表示与原图像相同的深度;
dx 和dy表示的是求导的阶数,0表示不求导,一般为0、1、2。
如下图所示,左图为原图,右图是用Sobel算子检测出的边缘。
其完整代码如下:

import cv2 as cv

def sobel(img):

x=cv.Sobel(src,cv.CV_16S,1,0)

y=cv.Sobel(src,cv.CV_16S,0,1)

gradx=cv.convertScaleAbs(x)

cv.imshow("x",gradx)

grady=cv.convertScaleAbs(y)

cv.imshow("y",grady)

res=cv.addWeighted(gradx,0.5,grady,0.5,0)

return res

src=cv.imread("E:/image/lena.jpg")

cv.imshow("origin",src)

res=sobel(src)

cv.imshow("sobel",res)

后两张图是展示的x和y方向上的梯度。
在本例中,Sobel函数的第二个参数这里使用的是cv.CV_16S,原因是Sobel函数求完导数后会有大于255的数或者会有负数,而原图像是unit8的,所以改成了16位有符号的数据类型,即cv.CV_16S。
经过处理后,要将16位的有符号数转换为unit8,所以在代码中会有后面几行。
3、其余参数
除以上4个参数外,其余参数为可选参数:
ksize 表示Sobel算子的大小,其值必须是正数和奇数,1,3,5,7;
scale 表示缩放导数的比例常数,默认情况下没有伸缩系数;
delta 表示将结果存入目标图像之前,添加到结果中的可选增量值;
borderType 表示边框模式。
有兴趣的朋友自己去实验吧

(0)

相关推荐

  • 【从零学习OpenCV 4】Laplacian算子

     小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>. ...

  • 【从零学习OpenCV 4】namedWindow函数&imshow函数的使用

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • OpenCV探索之路(十一):轮廓查找和多边形包围轮廓

    Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体.所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓. OpenCV中有一个很强大的函数,它可以从 ...

  • 【从零学习OpenCV 4】中值滤波

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【OpenCV 4开发详解】图像腐蚀

     小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>. ...

  • 【从零学习OpenCV 4】直方图均衡化

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】两图像间的像素操作

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • Python进阶——OpenCV之GUI

    文章目录 图像处理(Getting Started with Images) 读取图像 显示图像 保存图像 使用Matplotlib 视频处理(Getting Started with Videos) ...

  • 【从零学习OpenCV 4】图像膨胀

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • python+opencv图像处理(十四)

    图像直方图 1.灰度图像的直方图 灰度图像的直方图是灰度级和这种灰度级的概率之间关系的图形. 直接看图,下图中左侧是原图,右图为其直方图. 完整代码如下: import cv2 as cv impor ...

  • python+opencv图像处理(十九)

    视频的读入和显示 在图像处理中,视频处理是其中的重要一环,本篇介绍视频的读入和显示. 1.视频读入 Opencv中有自带的函数可以实现视频的读入和显示,代码如下: 视频其实也就是一帧一帧的图像,所以在 ...

  • python+opencv图像处理(十八)

    自适应直方图均衡 之前介绍的直方图均衡的方法是针对整幅图像来说的,也即是全局的直方图均衡化.全局的直方图均衡化会存在一些问题,比如因过度爆光而使得局部细节模糊等,如下图所示,左图是源图,右图是直方图均 ...

  • python+opencv图像处理(十五)

    直方图均衡 直方图均衡化是通过对图像的直方图进行修正来获得图像增强效果的方法,主要是进行对比度增强,就是让亮的更亮,暗的更亮. 1.灰度图像的直方图均衡 先上图看效果. 如图上标题所示,第一张是原图, ...

  • python+opencv图像处理(十二)

    图像仿射变换和透视变换 天晴了...... 1.仿射变换 图像的仿射变换就是图像的旋转加上拉升,说直白点,就是把矩形变成平行四边形. 要把矩形变成平行四边行,只需要拉伸其四个角点就行了,事实上,只需要 ...

  • python+opencv图像处理(十)

    图像旋转 本篇主要利用opencv的转换函数warpAffine实现图像的平移和旋转. 1.图像旋转 图像旋转即是根据某个中心点进行旋转. 要进行旋转,要找到中心点,要知道旋转角度,opencv提供了 ...

  • python+opencv图像处理(四十四)

    童年记忆中的爆米花,小时候只在过年的时候才能吃到,现在偶尔能在路边看到有在爆的,看到了总忍不住想买,虽然味道没什么变化,只是再吃不出来以前的幸福了. 长大了......心也大了...... 可是,实力 ...

  • python+opencv图像处理(四十二)

    Kirsch算子 1.Kirsch算子 Kirsch算子是R.Kirsch提出来一种边缘检测新算法,它采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方 ...

  • python+opencv图像处理(三十四)

    梯形低通滤波器 梯形低通滤波器类似上篇巴特沃斯低通滤波,只是其转移函数不同. 梯形低通滤波器的转移函数如下: 式中,D0为截止频率,D1可以任取,但要求D1>D0. 上两个都不能为负. D(u, ...