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

提前过了个万圣节,南瓜灯还蛮好看的,就是那些装鬼的有点吓人......

Scharr算子

1、Scharr算子

Scharr算子也是用于提取图像边缘的。

它是对Sobel算子差异性的增强,两者的原理和使用方式上相同。

Scharr算子检测边缘滤波的尺寸为3*3。

其在x方向和y方向的边缘检测算子如下所示:

2、Scharr算子实现

与sobel类似,在opencv中,也自带了函数Scharr来实现此算子,其参数都与sobel的类似。
如下图所示,左图为原图,右图是经scharr算子检测后的边缘图。
Scharr算法代码如下:

def scharr(src):

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

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

gradx=cv.convertScaleAbs(x)

grady=cv.convertScaleAbs(y)

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

return res

网络上说在实际应用中,sobel算子用得不多,如果要用,一般是用scharr算子。可参考链接:https://blog.csdn.net/JimmyFu0055/article/details/83719438

3、与sobel的比较

如下图所示,左图为原图,中间为sobel算子检测的图,右图为scharr算子检测后的结果图。
此图片来源于网络,请参考链接:
https://blog.csdn.net/weixin_45875105/article/details/103782528
此链接中对灰度图像进行操作,如下图所示:
其完整代码如下:

import cv2 as cv

import numpy as np

#Sobel算子,返回边缘检测的图像。

def sobel(src):

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

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

gradx=cv.convertScaleAbs(x)

grady=cv.convertScaleAbs(y)

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

return res

#Scharr算子,返回边缘检测的图像。

def scharr(src):

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

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

gradx=cv.convertScaleAbs(x)

grady=cv.convertScaleAbs(y)

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

return res

img=cv.imread("li.png",0)

w,h=img.shape

img=cv.resize(img,(int(w),int(h/1.5)),interpolation=cv.INTER_CUBIC)

s=sobel(img)

res=scharr(img)

r=np.hstack((img,s,res))

cv.imshow("compare",r)

(0)

相关推荐

  • 一个简单方法识别毛玻璃、高斯模糊

    作者:晟沚 前  言 本文主要推荐一种简单的方法识别带有毛玻璃.高斯模糊等效果的图片. 01 毛玻璃效果 毛玻璃效果的原理,即遍历每一个像素,随机选取这个像素周围的某一个像素,替换当前像素.可以使用o ...

  • (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

    (9条消息) OCR预处理:矫正图片中的文本信息(opencv)

  • 【从零学习OpenCV 4】边缘检测原理

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

  • OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标

    OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标 1.寻找轮廓 声明:在寻找图像轮廓之前需要对图像进行阈值分割或者Canny.拉普拉斯等边缘检测算子处理. 寻找轮廓的算子: findContours( ...

  • 【OpenCV读取标记点坐标】管道测速

    文章目录 一.项目简介 二.思考步骤 1. 图像二值化 2. 滤波去噪 3. Canny算法检测边缘 4. 查找轮廓并计算 5. 绘制轮廓并表示质心 三.测试结果 四.工程代码 一.项目简介 昨天一个 ...

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

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

  • OpenCV实战(1)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 最近 ...

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

    图像镜像 图像的镜像指的是将图像以某条线为中心进行镜像对换. 图像的镜像根据翻转的方向可分为水平镜像翻转.垂直镜像翻转和对角镜像翻转3种. 水平镜像翻转指的是将图像以y轴为中心进行左右镜像对换. 垂直 ...

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

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

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

    Luplacian算子 1.Luplacian算子 可以用二阶导数可以用来检测边缘,拉普拉斯算子是线性二阶微分算子. 2.Luplacian算子实现 在 OpenCV 中, 可以用函数Laplacia ...

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

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

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

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...

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

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

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

    傅里叶变换 对图像的傅里叶变换,就是将图像从图像空间变换到频率空间,从而可以在频率域对图像进行处理. 1.傅里叶变换 傅里叶变换的理论在任何一本数字图像处理的书里都有,网上也有很多,这里就不再解释了, ...

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

    多图像平均法 对于同一个场景拍摄的多张图像,一般情况下是相同的,但是在实际获取和传输图像的过程往往会发生图像失真,所得到图像和原始图像有某种程度的差别.这些都是因为有外界的噪声加入到图像中,因此在对采 ...

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

    上篇介绍了用opencv中的函数blur()实现邻域平均,除了用此函数外,还有其他可实现均值滤波的方法,如下. (1)根据数学公式,实现像素点的运算以实现领域平均. 数学公式在上篇有介绍. (2)用o ...