OpenCV图像处理——图像梯度

news/2024/7/21 5:49:22 标签: opencv, 图像处理, 计算机视觉

总目录

图像处理总目录←点击这里

七、图像梯度

7.1、图像梯度-Sobel算子

原图
在这里插入图片描述

直接计算

不建议这么算

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

在这里插入图片描述

分别计算——合并

当前位置的像素值等于sobel算子与(当前位置与周边位置8个点)进行对应位置相乘并相加操作,作为当前位置的像素点
在这里插入图片描述
G x = ( − 1 0 + 1 − 2 0 + 2 − 1 0 + 1 ) ∗ ( p 1 p 2 p 3 p 4 p 5 p 6 p 7 p 8 p 9 ) = ( p 3 − p 1 ) + ( 2 p 6 − 2 p 4 ) + ( p 9 − p 7 ) G_x=\left( \begin{matrix} -1& 0& +1\\ -2& 0& +2\\ -1& 0& +1\\ \end{matrix} \right) *\left( \begin{matrix} p_1& p_2& p_3\\ p_4& p_5& p_6\\ p_7& p_8& p_9\\ \end{matrix} \right) =\left( p_3-p_1 \right) +\left( 2p_6-2p_4 \right) +\left( p_9-p_7 \right) Gx=121000+1+2+1p1p4p7p2p5p8p3p6p9=(p3p1)+(2p62p4)+(p9p7)

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

  • ddepth:图像的深度(有可能负数,cv2.convertScaleAbs解决)
  • dx和dy分别表示水平和竖直方向
  • ksize是Sobel算子的大小(一般3X3)

Gx (右边减左边)cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)中1,0为取Gx

deep可能有负值,白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,效果如下

img = cv2.imread('./image/pie.png',cv2.IMREAD_GRAYSCALE)
def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
cv_show(sobelx,'sobelx')

在这里插入图片描述
deep的值要取绝对值cv2.convertScaleAbs,效果如下

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

在这里插入图片描述
Gy(下面减上面)cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) 中为0,1为

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

在这里插入图片描述
Gx和Gy求和

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

在这里插入图片描述

应用

原图

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

在这里插入图片描述
Sobel算子,轮廓效果

img = cv2.imread('./image/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')

在这里插入图片描述

7.2、图像梯度-Scharr算子

cv2.Scharr(src, ddepth, dx, dy, ksize)

  • ddepth:图像的深度(有可能负数,cv2.convertScaleAbs解决)
  • dx和dy分别表示水平和竖直方向
  • ksize是Sobel算子的大小(一般3X3)

在这里插入图片描述

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

在这里插入图片描述

7.3、图像梯度-laplacian算子

cv2.Scharr(src, ddepth, ksize)

  • ddepth:图像的深度(有可能负数,cv2.convertScaleAbs解决)
  • ksize是Sobel算子的大小(一般3X3)
    在这里插入图片描述
laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)
cv_show(laplacian,'laplacian')

在这里插入图片描述

7.4、图像梯度-对比

#不同算子的差异
img = cv2.imread('./image/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')

在这里插入图片描述


http://www.niftyadmin.cn/n/5789.html

相关文章

Redis面试题

目录 面试题:谈谈你对Redis的理解? 面试题:Redis的基本数据类型 Redis的基本数据类型以及它们的应用场景: 面试题:redis内存淘汰机制 面试题:Redis持久化机制 RDB AOF 面试题:Redis写时复…

<Java编程工具JDK、IDEA安装及环境配置教程>——《Java》

目录 Windows环境下Java编程工具安装及环境配置: 1.JDK的安装 1.1 JDK简介: 1.2 JDK安装: 1.3 JDK环境配置 2.IDEA安装 2.1 下载及安装: 2.2 使用演示: 3.写在最后的话: 后记:●由于作…

这个神器,让我的 Python 代码运行速度快了100倍

Python 已经得到了全球程序员的喜爱,连续多期稳坐编程语言排行榜第一把交椅。但是还是遭到一些人的诟病,原因之一就是认为它运行缓慢。 要是有一款能够自动优化我们代码的神器该有多好啊! 于是,大家都在想尽各种办法来提高 Pytho…

【map的实际应用,学习map,不用=白学】3302. 表达式求值【如何得到运算符优先级?自己过一遍示例即可明白】【怎么比较运算符的优先级?map】

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点 蓝色文字表示:思…

笔试强训第24天--(年终奖 + 迷宫问题)

选择 A B B的意思就是不用处理特殊情况 D 画图理解 D 中缀表达式转成后缀表达式: 数据栈 遇到数字就入栈 得到结果也入栈 操作符栈 遇到操作符 如果该操作符的优先级高于栈顶就入栈,否则取数据栈栈顶两个数据进行计算。 没有操作符入栈了就开始出栈操…

c++入门必学算法 质数筛

文章目录一、什么是质数筛二、暴力枚举1、暴力枚举基本思想:2、模板代码3、运行结果三、埃氏筛1、埃氏筛基本思想:2、模板代码3、运行结果四、欧拉筛1、对比埃氏筛2、欧拉筛的基本思想3、模板代码3、运行结果五、总结一、什么是质数筛 质数筛也叫素数筛…

100天精通Python(基础篇)——第21天:if elif嵌套

if int(input("你的身高是多少")) > 120:print("身高超过限制麻痹可以免费")print("但是,如果vip级别大于3,可以免费")if int(input("你的vip级别是多少")) > 3:print("您的vip级别大于3&#xff0c…

创龙AD+全志T3 ad_display 开发案例 (2)

上一篇:创龙AD全志T3 ad_display 开发案例(1) 前 言 本文主要介绍基于全志科技T3(ARM Cortex-A7)处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。 …