openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读 ?????OpenCV实战系列总目录

这篇具有很好参考价值的文章主要介绍了openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读 ?????OpenCV实战系列总目录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🧡💛💚💙💜OpenCV实战系列总目录

打印一个图片单独做出一个函数:

def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()

1、sobel算子

先读进来一个原型白色图

img = cv2.imread('pie.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

如图有两个3*3的卷积核,其中A是原始图片中的一个3*3的区域,这个A和3*3的卷积核所谓对应位置相乘的结果就分别是左右梯度和上下梯度

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

假如A是这个矩阵:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 那么Gx的计算结果就为:-x1+x3-2x4+2x6-x7+x9

代码实现就很简单了,直接一行就行:

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

cv_show(sobelx,'sobelx')

dst = cv2.Sobel(src, ddepth, dx, dy, ksize) 

  • src:原始图像
  • ddepth:图像的深度
  • dx和dy分别表示水平和竖直方向
  • ksize是Sobel算子的大小,就是一个卷积核的大小

将上面的结果打印出来:

cv_show(sobelx,'sobelx')

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 因为我们指定的是dx=1,dy=0,所以只计算了水平方向,很显然只有边界的地方才会有梯度

2、梯度计算方法

安装第1节的计算方法,白色减去黑色结果是正的,黑色减去白色结果就会为负数,而openCV的像素值在0-255,所以会将负数显示为0。如果加上绝对值就可以显示成右边的一圈白色了。

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

 打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 同样的方法计算一下上下梯度:

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)  
cv_show(sobely,'sobely')

 打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 分别计算水平方向和竖直方向再打印:

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

打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 不建议直接把dx和dy都直接设置成1:

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

打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 换一个图做一遍,先打印原图:

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv_show(img,'img')

打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
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_show(sobelxy,'sobelxy')

第二行、第四行分别计算sobelx和sobely,第三行、第五行分别取绝对值,第六行最后融合在一起

,打印结果: 

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

3、scharr算子和lapkacian算子

scharr夏尔

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

 lapkacian拉普拉斯

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

scharr算子就是让结果更加敏感一些,lapkacian算子在推导过程使用了二阶导,lapkacian对噪音点会比较敏感,但是对于梯度的计算或者说边缘检测就不是那么友好了,所以lapkacian算子经常和其他方法结合在一起进行使用。

如上图,它不是和其他算子一样,有一个左右和上下的计算,它将目标像素值乘以-4然后加上上下左右的值。因为lapkacian没有分水平和竖直两个方式,所以不需要分开再合并了。

将三种方法都做一遍,放在一起进行比较:

#不同算子的差异
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)   
sobely = cv2.convertScaleAbs(sobely)  
sobelxy =  cv2.addWeighted(sobelx,0.5,sobely,0.5,0)  

scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)   
scharry = cv2.convertScaleAbs(scharry)  
scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0) 

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   

res = np.hstack((sobelxy,scharrxy,laplacian))
cv_show(res,'res')

打印结果:

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能

很明显scharr算子更加敏感一下,计算出了更多的细节和线条 

最后看看原始图长什么样子:

img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv_show(img,'img')

openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读,openCV实战,opencv,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-684466.html

到了这里,关于openCV实战-系列教程4:图像梯度计算(Sobel算子/开运算/梯度计算方法/scharr算子/lapkacian算子)、源码解读 ?????OpenCV实战系列总目录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv基础41-图像梯度-sobel算子详解cv2.Sobel()(边缘检测基础)

    图像梯度是用于描述图像变化率的概念。在图像处理中,梯度指的是图像中每个像素的灰度值变化速率或方向。它常用于边缘检测和图像特征提取。 一维图像的梯度表示为函数 f(x) 的导数,而在二维图像中,梯度是一个向量,包含两个分量:水平方向和垂直方向的灰度变化率

    2024年02月14日
    浏览(42)
  • Opencv图像边缘检测——Roberts算子(手写)、Sobel算子(手写和调包)、Scharr算子、Laplacian算子

    Roberts算子即交叉微分算子,是基于交叉差分的梯度算子。此算法通过局部差分来计算检测图像的边缘线条,对噪声敏感。 Roberts 交叉微分算子分别为主对角线和副对角线方向的算子,有两个2*2的滤波算子组成: 对于图像而言,如果im表示图像像素矩阵,则可以如下计算(i,

    2024年02月04日
    浏览(69)
  • python --opencv图像处理Canny算子边缘检测(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)

    边缘检测是基于灰度突变来分割图像的常用方法,其实质是提取图像中不连续部分的特征。目前常见边缘检测算子有差分算子、 Roberts 算子、 Sobel 算子、 Prewitt 算子、 Log 算子以及 Canny 算子等。 其中, Canny 算子是由计算机科学家 John F. Canny 于 1986 年提出的一种边缘检测算子

    2024年04月12日
    浏览(47)
  • OpenCV-25sobel算子(索贝尔算子)

    前面所提到的滤波都是用于降噪的,去掉噪声,而算子是用来找边界,来识别图像的边缘。 边缘是 像素值发生跃迁 的值,是图像的显著特点之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。 人眼如何识别图像的边缘呢? 比如有一幅画,图里面有一条线

    2024年01月20日
    浏览(37)
  • 图像处理Sobel 算子

      Sobel算子是一种常用的图像处理算法,用于边缘检测。它利用了图像中灰度值的变化来识别边缘的位置。在OpenCV中,Sobel算子通常用于图像梯度计算,其中包括水平方向和垂直方向的梯度。这两个方向的梯度合并后可以得到图像的边缘信息。 原理:   Sobel算子的原理基

    2024年02月04日
    浏览(40)
  • 图像梯度——Sobel、Scharr、Laplacian

    图像梯度-Sobel算子 dst = cv2.Sobel(src, ddepth, dx, dy, ksize) src: 图像数组变量 ddepth: 图像的深度,一般填-1,表示与原始图像深度一致; cv2.CV_64F表示每一个像素点值为64位浮点数,是OpenCV定义的数据类型 dx和dy分别表示水平和竖直方向,1表示计算该方向的梯度,0表示不计算 ksize是

    2024年02月11日
    浏览(38)
  • Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

    图像和视频逐渐成为人们生活中信息获取的重要来源,而图像和视频在传输过程中有很多因素可能造成图像模糊,比如不正确的聚焦会产生离焦模糊,景物和照相机的相对运动会造成运动模糊,图像压缩造成的高频成分丢失模糊。 模糊降低了图像的清晰度,严重影响了图像质

    2024年02月04日
    浏览(50)
  • FPGA图像处理仿真实验——sobel算子

            sobel算子是一个离散的一阶差分算子,广泛应用于边缘检测等领域。算法的 应用原理比较简单,可以完成对水平方向和垂直方向的边缘检测。分别用图中的两个卷积模板对图像进行滑动窗口的卷积计算,将卷积模板和图像3*3窗口对应的数据相乘,相乘的结果相加得

    2024年02月17日
    浏览(41)
  • 【OpenCv • c++】基础边缘检测算子 —— Sobel

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月03日
    浏览(47)
  • 《opencv实用探索·十一》opencv之Prewitt算子边缘检测,Roberts算子边缘检测和Sobel算子边缘检测

    1、前言 边缘检测: 图像边缘检测是指在图像中寻找灰度、颜色、纹理等变化比较剧烈的区域,它们可能代表着物体之间的边界或物体内部的特征。边缘检测是图像处理中的一项基本操作,可以用于人脸识别、物体识别、图像分割等多个领域。 边缘检测实质上是计算当前点和

    2024年02月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包