当前位置: 首页 > article >正文

梯度计算中的一些算子

一、sobel算子

算子矩阵:2a74a11188824a4a87b5f3594da9e2ae.jpeg

# sobel算子 算梯度
# Gx = 右边-左边;Gy = 下边 - 上边
import cv2

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

img_people = cv2.imread('people.png', cv2.IMREAD_GRAYSCALE)
cv_show('img_people', img_people)
原图结果:

# dst = cv2.Sobel(src, ddepth, dx, dy, ksize)
# ddepth:图像的深度,ksiz是sobel算子的大小,cv2.CV_64F 是一种浮点数类型,表示为64位的浮点数
# 1, 0 表示的就是在x方向上做,而y方向上不做
sobelx = cv2.Sobel(img_people, cv2.CV_64F, 1, 0, ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
Gx的结果:

sobely = cv2.Sobel(img_people, cv2.CV_64F, 0, 1, ksize=3)
sobely = cv2.convertScaleAbs(sobely)
Gy的结果:

cv_show('Gx', sobelx)
cv_show('Gy', sobely)
# G = Gx+Gy
# 分别计算x与y,再求和
sobelxy = cv2.addWeighted(sobelx,0.5, sobely, 0.5, 0)
cv_show('G', sobelxy)
G的结果:
# 不建议直接计算
# 计算效果提取出来的边缘不明显
sobelxy = cv2.Sobel(img_people, cv2.CV_64F, 1, 1, ksize=3)
# 有正有负,使用convertScaleAbs
sobelxy = cv2.convertScaleAbs(sobelxy)
cv_show('直接计算G', sobelxy)

G直接计算的结果:

3c735158c63d4ad9a88f8149877411a1.png

二、Scharr算子与laplacian算子

计算矩阵中的数值变得更大,代码执行的结果更为丰富。laplacian算子,对噪声更敏感。

Scharr算子:30968224554e4ffcbbbd3fff4c236254.jpeg

laplacian算子:a319aaca069640438ac09ff19b5a1a48.jpeg

 

# 不同算子的差异
sobelx = cv2.Sobel(img_people, cv2.CV_64F, 1, 0, ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.Sobel(img_people, cv2.CV_64F, 0, 1, ksize=3)
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5, sobely, 0.5, 0)

Scharr算子:
scharrx = cv2.Scharr(img_people, cv2.CV_64F, 1, 0)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.Scharr(img_people, cv2.CV_64F, 0, 1)
scharry = cv2.convertScaleAbs(sobely)
scharrxy = cv2.addWeighted(sobelx,0.5, scharry, 0.5, 0)

laplacian算子:(没有x与y方向)
laplacian = cv2.Laplacian(img_people, cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)
res = np.hstack((sobelxy, scharrxy, laplacian))
cv_show('res', res)

6546e9d367004abfb71d9b707364e838.png

 


http://www.kler.cn/news/311494.html

相关文章:

  • 魔方财务迁移指南
  • 【mysql面试题】mysql复习之常见面试题(二)
  • Conda和pip 清空缓存
  • Vue Router v3 深入指南:配置、概念、代码演示及应用场景
  • 新发布的OpenAI o1生成式AI模型在强化学习方面迈出了重要的一步
  • PHP发邮件教程:配置SMTP服务器发送邮件?
  • Mysql高级篇(中)—— SQL优化
  • 【ComfyUI】自定义节点ComfyUI_LayerStyle——模仿 Adob​​e Photoshop 的图层样式、图层混合、图文混合、添加不可见水印
  • QString返回字符串的字节数
  • 【5】AT32F437 OpenHarmony轻量系统移植教程(2)
  • SSH 服务器,防止链接断开,训练终止操作————screen
  • Elasticsearch 分片迁移与移除集群节点操作
  • POI生成Excel文件增加数据验证(下拉序列)
  • 获取多媒体相册的内容
  • WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制
  • Qt 菜单栏、工具栏、状态栏、标签、铆接部件(浮动窗口) 设置窗口核心部件(文本编辑控件)的基本使用
  • 代理模式-动态代理
  • Vue3:defineProps接收父组件传递的数据
  • java八股文之Redis
  • Git 分支规范
  • 【Redis】个人笔记
  • java项目之在线考试与学习交流网页平台源码(springboot)
  • Ruby-SAML CVE-2024-45409 漏洞解决方案
  • 【快速笔记】freeRTOS
  • Loki 分布式日志中心服务
  • Hive基本原理与数据开发
  • 唯徳知识产权管理系统 UploadFileWordTemplate 任意文件读取
  • 开源项目 GAN 漫画风格化 UGATIT
  • 如何借助项目管理系统实现审批流程的自动化与标准化?
  • 无人机 PX4 飞控 | EKF 使用传感器汇总与添加传感器方法