opencv常用边缘检测算子示例

opencv常用边缘检测算子示例

    • 1. Canny算子
    • 2. Sobel算子
    • 3. Scharr算子
    • 4. Laplacian算子
    • 5. 对比


1. Canny算子

从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,检测算法可以分为以下5个步骤:

  1. 噪声过滤(高斯滤波)
  2. 计算图像梯度(Sobel滤波)
  3. 非极大值抑制(消除边缘检测带来的杂散响应)
  4. 双阈值处理(确定真实和潜在的边缘)
  5. 滞后阈值(抑制孤立的弱边缘)
import cv2
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
# 第2、3参数分别是低、高阈值
es = cv2.Canny(img, 100, 200)plot.figure(figsize=(6,3))
plot.subplot(1,2,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,2,2)
plot.title('Canny')
plot.imshow(es)plt.show()

在这里插入图片描述

2. Sobel算子

一种离散一阶导数的边缘检测算子,用于计算图像灰度函数的近似梯度,常用于边缘检测和特征提取,可以分别计算图像在X、Y方向的梯度。

import cv2
import numpy as np
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
sx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sy = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
sxy = np.sqrt(sx**2 + sy**2)
sxy = np.clip(sxy,0,255)plot.figure(figsize=(12,3))
plot.subplot(1,4,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,4,2)
plot.title('Sobel x')
plot.imshow(sx)
plot.subplot(1,4,3)
plot.title('Sobel y')
plot.imshow(sy)
plot.subplot(1,4,4)
plot.title('Sobel x+y')
plot.imshow(sxy)plt.show()

在这里插入图片描述

3. Scharr算子

由Scharr提出的,用于替代Sobel算子,用于需要更高精度的边缘检测时,作为高精度边缘检测算子,用法跟Sobel类似。

import cv2
import numpy as np
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
sx = cv2.Sobel(img, ddepth=cv2.CV_64F, dx=1, dy=0)
sy = cv2.Sobel(img, ddepth=cv2.CV_64F, dx=0, dy=1)
sx = cv2.convertScaleAbs(sx)
sy = cv2.convertScaleAbs(sy)
sxy = cv2.addWeighted(sx,0.5, sy, 0.5, 0)plot.figure(figsize=(12,3))
plot.subplot(1,4,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,4,2)
plot.title('Scharr x')
plot.imshow(sx)
plot.subplot(1,4,3)
plot.title('Scharr y')
plot.imshow(sy)
plot.subplot(1,4,4)
plot.title('Scharr x+y')
plot.imshow(sxy)plt.show()

在这里插入图片描述

4. Laplacian算子

一种基于二阶导数的边缘检测方法,利用拉普拉斯算子来检测图像中强度变化的区域(边缘),即通过计算图像的二阶导数,找到图像亮度的突变点,从而定位边缘的位置。

import cv2
import matplotlib.pyplot as plotimg = cv2.imread('tmp.jpg', cv2.IMREAD_GRAYSCALE)
la = cv2.Laplacian(img, cv2.CV_64F)plot.figure(figsize=(6,3))
plot.subplot(1,2,1)
plot.title('Source image')
plot.imshow(img)
plot.subplot(1,2,2)
plot.title('Laplacian')
plot.imshow(la)plt.show()

在这里插入图片描述

5. 对比

算法优点缺点适用场景
Canny 算子噪声抑制能力强,边缘检测效果好参数调节较为复杂通用边缘检测,适合大多数场景
Sobel 算子计算简单,适合检测水平和垂直边缘对噪声敏感,边缘检测效果一般检测水平和垂直边缘
Scharr 算子对边缘的响应更强,适合检测细微边缘对噪声敏感检测细微的边缘
Laplacian 算子可以检测边缘和角点对噪声非常敏感检测边缘和角点

系列文章:

  1. opencv常用边缘检测算子示例
  2. 图像颜色空间对比(Opencv)
  3. 图像变换方式区别对比(Opencv)
  4. 常用图像滤波及色彩调节操作(Opencv)
  5. 图像形态学操作对比(Opencv)

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

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

相关文章

Token安全存储的几种方式

文章目录 1. EncryptedSharedPreferences示例代码 2. SQLCipher示例代码 3.使用 Android Keystore加密后存储示例代码1. 生成密钥对2. 使用 KeystoreManager 代码说明安全性建议加密后的几种存储方式1. 加密后采用 SharedPreferences存储2. 加密后采用SQLite数据库存储1. Token…

MySQL数据库表的约束类型和使用

表完整约束性 约束条件 说明 PRIMARY KEY (PK) 标识该字段为该表的主键,是可以唯一的标识记录,不可以为空 UNIQUENOT NULL (primary key) FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联 (foreign key) NULL …

Java 线程详解 --线程概念、线程池、线程同步与安全机制

一、Java线程的概念 Java 线程的本质:每个线程对应一个操作系统线程,由操作系统调度。JVM 通过调用操作系统 API(如 Linux 的 pthread)创建线程。 关键点: • 用户态与内核态:线程调度依赖操作系统&#…

PCL 计算点云至平面距离(SIMD加速)

文章目录 一、简介二、实现代码三、实现效果一、简介 SIMD 是一种并行计算模型,其中“单指令”表示处理器在同一时刻执行相同的指令,而“多数据”则表示同一条指令操作多个数据元素(如数组中的多个元素或矩阵中的多个元素)。与传统的串行计算不同,SIMD 能够同时处理多个数…

Ubuntu 22.04 完美安装 ABAQUS 教程:从零到上手,解决兼容问题

教程概述与安装准备 本教程详细介绍了在 Ubuntu 22.04 系统上安装 ABAQUS 2023 及 ifort 2021 的步骤,并实现用户子程序的链接。教程同样适用于 ABAQUS 2021(需相应调整文件名和路径)以及 Ubuntu 18.04 至 22.04 系统,尽管未在所有版本上测试。需要注意的是,Intel 的 One…

Spark-TTS(Text-to-Speech):基于大语言模型的语音合成革新者!!!

Spark-TTS:基于大语言模型的语音合成革新者 🚀 (全称解析 核心特性 行业影响全解读) 一、概念定义与技术定位 1. 英文全称 Spark-TTS: An Efficient LLM-Based Text-to-Speech Model • 关键词解析: • LLM-Based…

2025年十六届蓝桥杯Python B组原题及代码解析

相关试题可以在洛谷上测试用例: 2025 十六届 蓝桥杯 Python B组 试题 A:攻击次数 答案:103 print(103)代码: # 初始化敌人的血量 x 2025# 初始化回合数 turn 0# 模拟攻击过程 while x > 0:# 回合数加一turn 1# 第一个英…

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换

原理解析 1. MySQL主从复制(Master-Slave Replication) 工作原理:MySQL主从复制通过二进制日志(binary log)来同步数据。主服务器记录所有更改操作到二进制日志中,从服务器读取这些日志并执行相应的SQL语…

【经验记录贴】使用配置文件提高项目的可维护性

mark一下。 整体修改前后如下: 课题: 在项目中有一个支持的文件类型的FILE_TYPE的定义, 这个是写死在主程序中,每次增加可以支持的文件类型的时候,都需要去修改主程序中这个FILGE_TYPE的定义。 主程序修改其实不太花时…

用DeepSeek AI高效制作专业PPT

在当今职场中,制作精美而有力的PPT是展示想法、汇报工作和赢得机会的关键技能。然而,许多人花费过多时间在格式调整和内容组织上,而非专注于核心信息的传达。DeepSeek AI作为新一代智能助手,能够帮助您将PPT制作效率提升300%,同时显著提高专业度。本文将详细介绍如何利用D…

【AI学习从零至壹】语⾔模型及词向量相关知识

语⾔模型及词向量相关知识 ⾃然语⾔处理简介⾃然语⾔理解(NLU)⾃然语⾔⽣成(NLG)发展趋势信息检索技术布尔检索与词袋模型基于相关性的检索 / TF-IDF举例: 语⾔模型 / Language Model神经⽹络语⾔模型Word2Vec训练⽅法…

15.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--如何拆分单体

单体应用(Monolithic Application)是指将所有功能模块集中在一个代码库中构建的应用程序。它通常是一个完整的、不可分割的整体,所有模块共享相同的运行环境和数据库。这种架构开发初期较为简单,部署也较为方便,但随着…

在ARM架构Mac上部署Python 3.12与Conda环境的全链路指南!!!

在ARM架构Mac上部署Python 3.12与Conda环境的全链路指南 🚀 (M1/M2芯片实测|含性能调优避坑手册) 🌟 核心价值点 • 原生ARM支持:突破Rosetta转译的性能损耗 • 环境隔离:Conda虚拟环境管理多…

yml文件上传并映射到实体类

文章目录 功能背景功能需要前端开发组件选用组件嵌套和参数绑定上传逻辑示例 后端开发接收逻辑解析逻辑省流纯手动实现(不建议) 功能背景 开发一个配置文件解析功能,需要兼容老版本的配置文件。 功能需要 前端:两个配置文件分别…

ElasticSearch中常用的数据类型

一、映射 Elasticsearch中通过映射来指定字段的数据类型,映射方式有2种,静态映射和动态映射。 1.动态映射 使用动态映射时,无须指定字段的数据类型,Elasticshearch会自动根据字段内容来判断映射到哪个数据类型。 比如&#xff…

【神经网络结构的组成】深入理解 转置卷积与转置卷积核

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 …

CSS高度坍塌?如何解决?

一、什么是高度坍塌? 高度坍塌(Collapsing Margins)是指当父元素没有设置边框(border)、内边距(padding)、内容(content)或清除浮动时,其子元素的 margin 会…

Web前端开发——格式化文本与段落(上)

一、学习目标 网页内容的排版包括文本格式化、段落格式化和整个页面的格式化,这是设计个网页的基础。文本格式化标记分为字体标记、文字修饰标记。字体标记和文字修饰标记包括对于字体样式的一些特殊修改。段落格式化标记分为段落标记、换行记、水平分隔线标记等。…

关于PHP开源CMS系统ModStart的详细介绍及使用指南

关于PHP开源CMS系统ModStart的详细介绍及使用指南: 🔍 ModStart是什么? 基于Laravel框架开发的模块化CMS系统采用Apache 2.0 开源协议,完全免费可商用特别适合需要快速搭建企业级网站/管理系统的开发者 🚀 核心优势…

TCP标志位抓包

说明 TCP协议的Header信息,URG、ACK、PSH、RST、SYN、FIN这6个字段在14字节的位置,对应的是tcp[13],因为字节数是从[0]开始数的,14字节对应的就是tcp[13],因此在抓这几个标志位的数据包时就要明确范围在tcp[13] 示例1…