2022-08-03 11:03阅读: 69评论: 0推荐: 0

OpenCV图像处理笔记[05]

26. sobel理论基础

27. sobel算计及其函数使用

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

​ dst, 计算结果 src, 原始图像

​ ddepth, 处理结果图像深度

​ dx, x轴方向

​ dy, y轴方向

​ ksize, 核大小

  • ddepth, 处理结果图像深度

通常情况下,可以将该参数的值设置为-1,让处理结果与原始图像保持一致

实际操作中,计算梯度值可能会出现负数。通常处理的图像是np.unit8类型,如果结果也是该类型,所有负数会自动截断为0,发生信息丢失。所以通常计算时,使用更高的数据类型,cv.CV_64F, 取绝对值后,再转换为np.unit8(cv2.CV_8U)类型。

dst = cv2.convertScaleAbs( src [, alpha [ , beta]])

作用: 将原始图像src转换为256色位图

公式: 目标图像 = 调整 ( 原始图像 * alpha + beta )

​ 直接调整: 目标图像 = cv2.convertScaleAbs( 原始图像 )

  • dx , x 轴方向

  • dy , y 轴方向

    ​ 计算x方向梯度 : 【dx = 1, dy =0]

    ​ 计算y方向梯度 : 【dx = 0, dy =1]

  • 计算sobel结果

      • 方式1

        ​ dx = 1, dy = 1

        ​ dst = cv2.Sobel( src, ddepth, 1, 1 )

      • 方式2

        ​ dx = cv2.Sobel( src, ddepth, 1, 0 )

        ​ dy = cv2.Sobel( src, ddepth, 0, 1 )

        ​ dst = dx + dy

        ​ dst = dx * 系数1 + dy * 系数2

      函数
      dst = cv2.addWeighted(src1,alpha,src2,beta,gamma)

      功能: 计算两幅图像的权重和

      ​ dst,计算结果 src1, 源图像1
      ​ alpha, 源图像1的系数
      ​ src2, 源图像2
      ​ beta, 源图像2的系数
      ​ gamma, 修正值
      关系 dst( I ) = saturate ( src1 ( I ) * alpha + src2( I ) * beta + gamma)
      例: dst = cv2.addWeighted(src1,0.5,src2,0.5,0)

28. scharr算子函数及其使用

​ 使用3 * 3的sobel算子时,可能不太精准,scharr算子效果更好

dst = Scharr ( src , ddpeth, dx, dy )

dst,计算结果 src1, 原始图像
ddepth, 处理结果图像深度
dx, x轴方向
dy, y轴方向

​ ddepth, 处理结果图像深度

​ dst = Scharr ( src, cv2.CV_64F, dx, dy )

​ dst = cv2.convertScaleAbs( dst )

dx, x轴方向 dy, y轴方向
dst = Scharr ( src, ddpeth, dx = 1, dy = 0 )
dst = Scharr ( src, ddpeth, dx = 0, dy = 1 )
两个方向的梯度 = dx + dy
scharrxy = cv2.addWeighted ( scharrx, 0.5, scharry, 0.5, 0 )

满足条件: dx >= 0 && dy >= 0 && dx + dy == 1

​ dst = Scharr ( src , ddpeth, dx, dy )

等价于

​ dst = cv2.Sobel( src, ddepth, dx, dy, -1)

29. sobel算子和scharr算子的比较

​ 不同之处:系数不同

​ 相同: 使用的卷积核大小一样,运算速度一样

​ scharr更精密一点

30. laplacian算子及其使用

​ 拉普拉斯算子类似于二阶sobel导数。实际上,在OpenCV中通过调用sobel算子来计算拉普拉斯算子。

​ 一阶导数 sobel算子 = |左 - 右| + |下 - 上| scharr算子 = |左 - 右| + |下 - 上|

​ 二阶导数 Laplacian算子 = |左 - 右| + |下 - 上| + |左 - 右| + |下 - 上|

  • dst = cv2.Laplacian( src, ddepth )

    • dst , 结果图像

    • src , 原始图像

    • ddepth , 图像深度

      • 通常情况下,可以将该参数的值设为-1,让处理结果与原始图像保持一致。

      • 实际操作中,计算梯度值可能会出现负数。
        通常处理的图像是np.uint8类型,如果结果也是该类型,所有负数会自动截断为0,发生信息丢失。
        所以,通常计算时,使用更高的数据类型cv2.CV_64F,取绝对值后,再转换为np.uint8(cv2℃v81-J)类型。

        出现负数时:dst = cv2.convertScaIeAbs(src)
        将原始图像调整为256色位图。
        示例:目标图像 = cv2.convertScaleAbs(原始图像)

本文作者:Hecto

本文链接:https://www.cnblogs.com/tow1/p/16546329.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Hecto  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑