4,使用 OpenCV 进行边缘检测

2023-11-09

在这里插入图片描述
效果微信扫码查看
原图:
在这里插入图片描述
sobel X
在这里插入图片描述
sobel Y
在这里插入图片描述
sobel XY
在这里插入图片描述
canny边缘检测
在这里插入图片描述

边缘检测是一种图像处理技术,用于识别对象的边界(边缘)或图像内的区域。边缘是与图像相关的最重要的特征之一。我们通过图像的边缘了解图像的底层结构。因此,计算机视觉处理管道在应用中广泛使用边缘检测。

1,项目下载

https://download.csdn.net/download/qq_43033547/30007450
或:

import cv2

# Read the original image
img = cv2.imread('test.jpg') 
# Display original image
cv2.imshow('Original', img)
# cv2.waitKey(0)

# Convert to graycsale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Blur the image for better edge detection
img_blur = cv2.GaussianBlur(img_gray, (3,3), 0) 


# Sobel Edge Detection
sobelx = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=1, dy=0, ksize=5) # Sobel Edge Detection on the X axis
sobely = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=0, dy=1, ksize=5) # Sobel Edge Detection on the Y axis
sobelxy = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=1, dy=1, ksize=5) # Combined X and Y Sobel Edge Detection
# Display Sobel Edge Detection Images
cv2.imshow('Sobel X', sobelx)
# cv2.waitKey(0)
cv2.imshow('Sobel Y', sobely)
# cv2.waitKey(0)
cv2.imshow('Sobel X Y using Sobel() function', sobelxy)
#cv2.waitKey(0)

# Canny Edge Detection
edges = cv2.Canny(image=img_blur, threshold1=100, threshold2=200) # Canny Edge Detection
# Display Canny Edge Detection Image
cv2.imshow('Canny Edge Detection', edges)


cv2.waitKey(0)

cv2.destroyAllWindows()

原始图像下载:
在这里插入图片描述

2,如何检测边缘

边缘的特点是像素强度的突然变化。为了检测边缘,我们需要去寻找相邻像素中的这种变化。来,让我们探索一下 OpenCV 中可用的两种重要边缘检测算法的使用:Sobel Edge Detection 和 Canny Edge Detection。我们将讨论理论并演示每个在 OpenCV 中的用法。

首先,看一下演示边缘检测的代码。每行代码都将详细讨论,以便您完全理解它。

import cv2

# Read the original image
img = cv2.imread('test.jpg') 
# Display original image
cv2.imshow('Original', img)

# Convert to graycsale
#在这里,我们将彩色图像作为灰度图像读入,因为您不需要颜色信息来检测边缘

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Blur the image for better edge detection
'''
读取图像后,我们还使用该GaussianBlur()函数对其进行模糊处理。这样做是为了减少图像中的噪声。

在边缘检测中,必须计算像素强度的数值导数,这通常会导致“噪声”边缘。

换句话说,图像中相邻像素(尤其是靠近边缘)的强度可能会波动很大,

从而产生不代表我们正在寻找的主要边缘结构的边缘。
模糊可以平滑边缘附近的强度变化,从而更容易识别图像中的主要边缘结构
'''
img_blur = cv2.GaussianBlur(img_gray, (3,3), 0) 

# Sobel Edge Detection
sobelx = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=1, dy=0, ksize=5) # Sobel Edge Detection on the X axis
sobely = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=0, dy=1, ksize=5) # Sobel Edge Detection on the Y axis
sobelxy = cv2.Sobel(src=img_blur, ddepth=cv2.CV_64F, dx=1, dy=1, ksize=5) # Combined X and Y Sobel Edge Detection
# Display Sobel Edge Detection Images
cv2.imshow('Sobel X', sobelx)
cv2.imshow('Sobel Y', sobely)
cv2.imshow('Sobel X Y using Sobel() function', sobelxy)


# Canny Edge Detection
edges = cv2.Canny(image=img_blur, threshold1=100, threshold2=200) # Canny Edge Detection
# Display Canny Edge Detection Image
cv2.imshow('Canny Edge Detection', edges)


cv2.waitKey(0)

cv2.destroyAllWindows()

sobel 边缘检测

1,Sobel 算子检测以像素强度突然变化为标志的边缘
在这里插入图片描述
当我们绘制强度函数的一阶导数时,强度的上升更加明显。
在这里插入图片描述
上图表明可以在梯度高于特定阈值的区域中检测到边缘。

此外,导数的突然变化也会揭示像素强度的变化。考虑到这一点,我们可以使用 3×3 内核来近似导数。我们使用一个内核来检测 X 方向和Y方向上像素强度的突然变化。

在这里插入图片描述
2,在下面的代码示例中,我们使用Sobel()函数来计算:

单独的 Sobel 边缘图像,在两个方向(x 和 y),
两个方向的复合梯度 (xy)


以下是使用 OpenCV 应用 Sobel 边缘检测的语法:

Sobel(src, ddepth, dx, dy)

参数ddepth指定输出图像的精度,而dx和dy指定每个方向的导数顺序。例如:

 如果dx=1和dy=0,我们计算 x 方向上的一阶导数 Sobel 图像。
 如果同时dx=1和dy=1,我们计算两个方向的一阶导数 Sobel 图像

Canny 边缘检测

该算法本身遵循从图像中提取边缘的三个阶段过程。添加图像模糊,这是减少噪声的必要预处理步骤。这使其成为一个四阶段过程,其中包括:

  • 降噪
  • 计算图像的强度梯度
  • 抑制假边
  • 滞后阈值

降噪

原始图像像素通常会导致噪声边缘,因此在计算边缘之前减少噪声很重要 在 Canny 边缘检测中,高斯模糊过滤器用于从本质上去除或最小化可能导致不良边缘的不必要细节。

以下是使用 OpenCV 应用 Canny 边缘检测的语法:

Canny(image, threshold1, threshold2)

在下面的代码示例中,该 Canny()函数实现了上述方法。我们只提供 Canny 边缘检测算法使用的两个阈值,OpenCV 处理所有实现细节。在调用Canny()函数之前不要忘记模糊图像。这是一个强烈推荐的预处理步骤。

结束语

我们讨论了是什么使边缘检测成为如此重要的图像处理技术,并专注于了解它的两个最重要的算法(Sobel 边缘检测和 Canny 边缘检测)。在演示它们在 OpenCV 中的使用时,我们强调了为什么模糊是一个如此重要的预处理步骤。

您还看到了 Canny Edge Detection 如何实际使用 Sobel 算子来计算数值导数。并且强大而灵活,甚至可以使用非最大抑制和滞后阈值来发挥最大优势。最后,您了解了为什么 Canny 边缘检测是执行边缘检测的首选和最广泛使用的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4,使用 OpenCV 进行边缘检测 的相关文章

随机推荐

  • 激光二极管驱动电路图大全(六款激光二极管驱动电路设计原理图详解) - 全文

    激光二极管驱动电路图大全 六款激光二极管驱动电路设计原理图详解 全文 来源 网络整理 作者 2018年03月01日 14 36 1 分享 订阅 关键词 驱动电路激光二极管 激光二极管驱动电路图 一 驱动电路图1 左 电路的基准电压不用常见的
  • word 插入图片偏右问题

    通常在word中插入图片 当图片较大时会向右边延伸出去 如下图 默认嵌入型 因为图片较大超出了纸张范围 绿色框 但是左侧又有很大空间 蓝色框 调整方法 方式一 可以点击图片 在四角手动拖动鼠标缩放图片大小 直到看起来左右适中 方式二 先在w
  • C++真的能兼容C吗?

    总结 C 虽然改造自C 但是二者并非完全兼容 且语法中存在一定差异 上述几点 并非C与C 全部差异 C 真的能兼容C吗 今天看到了网上说C是C 的子集 C 可以兼容C 这是真的吗 要弄明白这个问题 首先 先简单介绍一下这两个语言 C C语言
  • 【论文解读】滴滴智能派单-KDD2018 Large-Scale Order Dispatch in On-Demand Ride-Hailing

    Large Scale Order Dispatch in On Demand Ride Hailing Platforms A Learning and Planning Approach 一 简介 基于大量历史数据 构建一个大Q表 用于
  • ISP、IAP、DFU和bootloader

    这是嵌入式开发中常用的几个专业术语 其诞生的背景和其具体作用大概如下 在很久很久以前 那是8051单片机流行的时代 做单片机开发都需要一个专用工具 就是单片机的编程器 或者叫烧写器 说 烧 写一点不为过 当年的经典芯片AT89C51在编程时
  • selenium用法详解【从入门到实战】【Python爬虫】【4万字】

    跳转文末 获取实战源码与作者联系方式 共同学习进步 文章目录 简介 selenium安装 安装浏览器驱动 确定浏览器版本 下载驱动 定位页面元素 打开指定页面 id 定位 name 定位 class 定位 tag 定位 xpath 定位 c
  • 2023年工业信息安全技能大赛—岗位技能锦标赛通知

    点击星标 即时接收最新推文 一 锦标赛背景 为加速推进数字化 智能化 5G 大数据等新一代信息技术与制造业深度融合 提升工业信息安全行业学习人员的技能水平 结合装备制造产业发展需要 促进装备制造产业高质量发展 加快培养工业信息安全技能人才
  • SM.MS图床api调用

    第一步 注册sm ms账号 并获取API Access 第二步 HTML结构 我用的是vue
  • upload-labs大详解

    pass1 上传一个php一句话文件 记得改成php格式 发现不允许上传php类型的 只能上传jpg gif pngl的我们打算用burp抓包 先上传jpg的 然后用burp改成php的 放包后 找到它的存储位置 用蚁剑连接 成功连接 pa
  • python基础笔记(二)_pandas的基础语法

    数据分析工具包 Pandas 基础序列 一维数组 Series Series 是带有标签的一维数组 可以保存任何数据类型 轴标签统称为索引 index查看series索引 类型为rangeindex values查看series值 类型是n
  • Mysql之一行转多行(列转行)--- help_topic

    用到的知识点 substring index str delim count str 要处理的字符串 delim 分隔符 count 计数 例子 str www wikibt com substring index str 1 结果是 ww
  • Java实现比较APP版本号大小

    实现代码如下 比较APP版本号的大小 p 1 前者大则返回一个正数 2 后者大返回一个负数 3 相等则返回0 param version1 app版本号 param version2 app版本号 return int public sta
  • 如何利用ChatGPT写毕业论文

    如何利用ChatGPT写毕业论文 ChatGPT是什么 利用ChatGPT写毕业论文的步骤 1 准备数据 2 训练模型 3 生成论文 4 检查论文 总结 地址 ChatGPT是什么 ChatGPT是一个基于GPT 2模型的开源聊天机器人 它
  • Fabric开发(三)ubuntu下启动Fabric2.2.0网络,并测试一个Fabcar的demo

    前面几章内容 我们已经详细讲解过fabric 1 4 3网络搭建 fabric2 2 0本地编译 今天 我们在fabria2 2 0版本中 启动一个网络 并用SDK调用一个fabcar 的demo 体验一下fabric新版本 我们今天用No
  • 华为云AI视觉开发平台--HiLens使用中如何导入(转换)模型?

    HiLens是华为云的端云协同多模态AI开发应用平台 提供简单易用的开发框架 开箱即用的开发环境 丰富的AI技能市场和云上管理平台 对接多种端侧计算设备 支持视觉及听觉AI应用开发 AI应用在线部署 海量设备管理等 华为HiLens由AI推
  • 玩转Mixly – 9、Arduino AVR编程 之 函数

    以下内容源自Mixly官方技术文档 https mixly readthedocs io zh CN latest Arduino AVR 08Functions html 函数 在函数部分 主要分为定义函数和执行函数 需注意 当用户自定义
  • PHP自学教程之PHP加密函数

    数据加密的基本原理就是对原来的明文的文件或数据按某种算法进行处理 使其成为不可读的一定代码 通常称为 密文 通过这样的途径来达到保护数据不被非法窃取和阅读目的 PHP加密的函数主要有 crypt md5 和sha1 函数 还有加密的拓展库M
  • REDIS09_LBS出现背景、GEO算法介绍、算法步骤、剖析、邻近网格位置推算

    文章目录 LBS出现的背景 重新认识经纬度 感性认识GeoHash Geohash算法介绍 Geohash算法步骤 更深入剖析GeoHash 邻近网格位置推算 LBS出现的背景 移动互联网时代LBS应用越来越多 所在位置附近三公里的药店 交
  • Spring Boot + Spring Cloud + Spring Cloud Alibaba 版本对照表

    Json 详细数据 Spring Cloud 版本对应文档 Spring Cloud Alibaba 版本对应文档 spring cloud dependencies 版本 spring cloud 版本 spring boot 版本 sp
  • 4,使用 OpenCV 进行边缘检测

    效果微信扫码查看 原图 sobel X sobel Y sobel XY canny边缘检测 边缘检测是一种图像处理技术 用于识别对象的边界 边缘 或图像内的区域 边缘是与图像相关的最重要的特征之一 我们通过图像的边缘了解图像的底层结构 因