Python OpenCV 影像处理:边缘检测

news2024/9/21 5:44:40

►前言

上篇介绍使用OpenCV Python findContours() 函数用于在二值化影像中寻找连通的白色区域,并返回一系列点的集合来表示找到的轮廓。本篇将介绍基于计算影像的梯度,通过在影像中找到梯度值的变化来识别边缘,边缘检测通常用于预处理步骤,以帮助后续的物体侦测、分割或其他影像处理任务。透过程式码的说明,让各位了解OpenCV Python于图像处理上的基本操作。

►边缘检测定义

边缘检测是指在数字图像中寻找并识别物体边界的过程。在影像处理中,边缘通常表示著图像中不同区域之间的剧烈变化或不连续性,这些变化可能由物体的几何结构、亮度、颜色或纹理等特征引起。边缘检测的目标是找到这些变化的位置,以便进一步的分析和处理,例如物体侦测、图像分割、特征提取等。常见的边缘检测算法有Canny边缘检测、Sobel算子、Laplacian算子等。

►Canny边缘检测

OpenCV提供Canny ()函数用于在灰度影像中寻找轮廓。由于边缘侦测容易受到影像中杂讯的影响,因此用 5x5 高斯滤波器去除影像中的杂讯。然后使用 Sobel 在水平和垂直方向上对平滑后的图像进行滤波,获得水平方向上的一阶导数(??

)和垂直方向(??),如下所示:

获得梯度大小和方向后,对影像进行全面扫描,以去除可能不构成边缘的任何不必要的像素,因此在每个像素处,检查像素是否是其邻域中梯度方向的局部最大值。

最后透过两个阈值minVal 和 maxVal,进行边缘判断,梯度大于 maxVal 的任何边缘是图像边缘,而低于 minVal 的边缘不是图像边缘。

►Sobel算子

Sobel 算子是一种离散的微分算子,结合了高斯平滑和微分求导运算。利用局部差分寻找边缘,计算梯度的近似值。

►Laplacian算子

Laplacian算子采用二阶导数来侦测边缘,因为二阶导数在边缘位置为零,透过二阶倒数运算便可以得知边缘位置。

►小结

透过以上讲解,搭配程式码进行范例讲解,相信各位对于图像上的边缘检测能有更深刻的理解,期待下一篇博文吧!

►Q&A

 问题一:如何在OpenCV中进行边缘侦测?

在 OpenCV 中,可以使用 cv2.Canny() 函数进行边缘侦测。此函数需要输入灰阶影像,并且通常需要调整两个阈值参数来控制边缘侦测的灵敏度。

问题二:如何选择适当的阈值参数进行边缘检测?

选择适当的阈值参数取决于影像的特性以及应用需求。一般来说,可以透过试验不同的参数值并观察结果来进行调整。较低的阈值会导致更多的边缘被侦测出来,而较高的阈值则会限制侦测到的边缘数量。

问题三:如何对边缘侦测结果进行后处理?

边缘检测常常会产生一些断断续续的边缘,因此可以对检测结果进行后处理来提高品质。常见的后处理步骤包括二值化、非最大值抑制和边缘连接等。

问题四:如何在不同的影像类型上进行边缘检测? 

OpenCV 的边缘侦测函数通常接受灰阶影像作为输入,因此对于彩色影像,需要先将其转换为灰阶影像。可以使用 cv2.cvtColor() 函数将彩色影像转换为灰阶影像。

问题五:如何显示边缘检测结果? 

显示边缘侦测结果与显示原始影像类似。可以使用 cv2.imshow() 函数显示影像,然后透过 cv2.waitKey() 等待按键输入,并最后使用 cv2.destroyAllWindows() 关闭所有视窗。

►参考资料    

OpenCV - Open Computer Vision Library

欢迎登录大大通,了解更多原厂技术方案、学习教程吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…

rust 编译时报错:type annotations needed for Box

如下图所示: 解决方法: 升级time的版本: cargo update -p time

【Python基础】Python入门基础教程(非常详细){附带源码}

引言 Python 是一种广泛使用的高级编程语言,因其简洁的语法和强大的功能库而受到开发者的喜爱。本教程将带你从零开始,逐步掌握 Python 的基础知识,并通过附带的源码和表格来加深理解。 点击免费领取《CSDN大礼包》:Python入门到…

c语言基础知识详解,c语言入门必看

在线书籍:54笨鸟 前言 C 语言是一门抽象的、面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都…

最详细!教你学习haproxy七层代理

一、工作原理 (1)包括 监听端口:HAProxy 会在指定的端口上监听客户端的请求。 例如,它可以监听常见的 HTTP 和 HTTPS 端口,等待客户端连接。请求接收:当客户端发起请求时,HAProxy 接收到请求。…

Gin框架接入pyroscope完美替代pprof实现检测内存泄露

传统检测内存泄露可以看一下我这篇文章Gin框架接入Prometheus,grafana辅助pprof检测内存泄露-CSDN博客 pyroscope被Grafana收购,GPT来总结一下pyroscope的强大之处🐶 pyroscope github地址 pyroscope与grafana的安装 docker compose安装,这里我们其实…

GET和POST这两种常用的HTTP请求方法的区别

GET和POST是HTTP协议中最常用的两种请求方法,它们在使用场景、安全性、数据传输等方面有很大的不同。让我从以下几个方面来比较GET和POST: 1.「用途和语义」 「GET」: 主要用于获取资源 应该是幂等的,即多次请求应该返回相同的结果 通常用…

超详细!!!electron-vite-vue开发桌面应用之开启调试工具(二)

云风网 云风笔记 云风知识库 上篇已经初步搭建完项目,这次配置比较重要的一部分,那就是开启调试工具,这是开发项目比较重要且基础的部分 vite.config.ts配置更新 main: {// Shortcut of build.lib.entry.entry: electron/main.ts,onstart(ar…

2003-2023年高铁数据高铁开通时间数据

2003-2023年高铁数据高铁开通时间数据 1、时间:2003-2023年 2、来源:整理自高铁航线数据库(Chinese High-speed Rail and Airline Database,CRAD) 3、指标:高铁站名称、开通时间、所在省份、所在城市、所…

通过网关将数据上传到两台eqmx服务器上

我们是通过WAN 来读取数据。 线连接以后打开 然后要配置上去服务器 在这里遇到的问题是我自己搭emqx服务器的时候,没有固定ip地址,这个ip地址要通过ipconfig来获取,然后将其设置为静态IP地址,才可以的。让后emqx服务器还要重新启…

美股开户:新手投资者的完整入门教程

炒美股是许多投资者心中的梦想,但对于新手小白来说,如何开户炒美股可能会显得有些复杂和困难。本文将为您提供一份完整的入门教程,详细介绍从选择券商到完成开户的步骤,帮助您顺利进入美股市场。 选择合适的券商 在开户之前&…

【Linux基础】Linux中的开发工具(1)--yum和vim

目录 ✈️前言一,Linux 软件包管理器 yum1. 什么是软件包2. 如何安装软件3. 如何卸载软件 二,Linux编辑器-vim使用1. vim的基本概念1.1 命令/正常/普通模式1.2 插入模式1.3 底行模式 三,vim命令模式命令集1. 移动光标2. 删除字符3. 复制4. 替…

后端调优——分布式锁选型——入门

文章目录 引言正文分布式锁的定义分布式锁的具体应用场景如何实现分布式锁主动轮询型分布式锁实现思路一、MySQL分布式锁二、Redis分布式锁 监听回调型分布式锁Etcd分布式锁Zookeeper分布式锁 锁的对比 总结 引言 最近面试,一直被问到分布式锁,然后仅仅…

基于Martin实现MapboxGL自定义底图

概述 本文分享基于Martin实现MapboxGL底图的自定义。 实现后效果 Martin简介 Martin 是一个瓦片服务器,它能够从 PostGIS 数据库、PMTiles(本地或远程)以及 [MBTiles] (https://github.com/mapbox/mbtiles-spec) 文件中快速生成并提供矢量瓦…

七人共享拼团:社交电商的裂变新引擎

在当今电商市场中,七人共享拼团模式以其独特的社交属性和裂变机制,正成为一股不可忽视的力量。这一模式巧妙融合了社交电商的互动性与拼购的实惠性,通过平台利润回馈用户的方式,构建了一个既人性化又高效的奖励体系,旨…

QT 添加程序图标

1. 使用免费网站将其他图片格式转化成ico格式 Ico转换器 : https://cn.free-converter.com/ico-converter 2.qmake项目添加程序图标 在.pro文件内添加语句,如下图 RC_ICONS favicon.ico2.1 程序图标文件添加到项目目录内 2.2 通过windeployqt xxx.exe构建生成的…

动手研发实时口译系统

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

一文通晓 AI 框架

首先深度学习是机器学习研究领域中的一种范式,而深度学习的概念源于对人工神经网络的研究,很多深度学习算法都使用神经网络进行表示,因为神经网络的性能精度和通用效果都非常好,于是业界习惯性地把深度学习算法等同于 AI。 深度学…

GNSS位移监测站:高精度、高稳定性、高安全性

在现代工程与自然灾害监测领域,GNSS位移监测站以其卓越的功能优势,正逐步成为守护安全、预防灾害的重要工具。其采用的直径114mm加强型立杆,不仅坚固耐用,更严格遵循《地质灾害专群结合监测领警技术指南(试行&#xff…

企业建设零信任体系的核心思路

根据安全牛的调查研究发现,零信任安全理念已经较广泛得到国内各类型企业用户的认可,组织对应用零信任进行网络安全建设已经初具信心,零信任理念对网络安全防护工作的价值开始多方面的展现。 企业开展零信任网络建设的需求和驱动因素 本次调…