OpenCV中的边缘检测技术及实现

介绍:

边缘检测是计算机视觉中非常重要的技术之一。它用于有效地识别图像中的边缘和轮廓,对于图像分析和目标检测任务至关重要。OpenCV提供了多种边缘检测技术的实现,本博客将介绍其中的两种常用方法:Canny边缘检测和Sobel边缘检测。

理论介绍:

1. Canny边缘检测:

Canny边缘检测是一种经典的边缘检测算法,它被广泛应用于图像处理领域。该方法结合了多个步骤,包括高斯滤波、计算梯度、非最大值抑制和双阈值处理。首先,通过应用高斯滤波器来平滑图像,以减少噪声的影响。然后,计算图像的梯度,找到像素点的边缘强度和方向。接下来,进行非最大值抑制,通过比较像素点周围的梯度值来细化边缘。最后,通过设置高低阈值来检测真正的边缘。

2. Sobel边缘检测:

Sobel算子是一种基于图像梯度的边缘检测算法,它通过计算像素点的梯度来检测边缘。该算子使用两个3x3的卷积核,分别对图像进行水平和垂直梯度计算。水平梯度可以检测垂直边缘,垂直梯度可以检测水平边缘。通过将水平和垂直梯度的结果进行组合,可以得到图像的整体边缘信息。

程序实现:

python程序代码

下面是使用Python和OpenCV实现Canny边缘检测和Sobel边缘检测的示例代码:

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 16 21:44:22 2024

@author: 李立宗

公众号:计算机视觉之光

知识星球:计算机视觉之光

"""

import cv2
import numpy as np

# 读取图像
image = cv2.imread('lena.bmp', 0)

# Canny边缘检测
canny_edges = cv2.Canny(image, 100, 200)

# Sobel边缘检测
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
sobel_edges = np.sqrt(sobel_x**2 + sobel_y**2).astype(np.uint8)

# 显示原始图像和边缘检测结果
cv2.imshow('Original Image', image)
cv2.imshow('Canny Edges', canny_edges)
cv2.imshow('Sobel Edges', sobel_edges)

cv2.waitKey(0)
cv2.destroyAllWindows()

程序演示

在这里插入图片描述

小结

在这个示例中,我们读取了一张灰度图像,并分别使用Canny边缘检测和Sobel边缘检测算法进行了边缘检测。最后,将原始图像和边缘检测结果展示出来。

结论:

边缘检测是计算机视觉中重要的技术之一,用于识别图像中的边缘和轮廓。其中,Canny边缘检测和Sobel边缘检测是常用的方法,它们在OpenCV中都有相应的实现。本博客介绍了这两种方法的理论原理,并给出了使用OpenCV实现边缘检测的示例代码。希望通过本博客的学习,初学者可以对OpenCV中的边缘检测有一个清晰的了解,并将其应用于自己的项目中。

相关知识点

理解并实现OpenCV中的图像平滑技术

参考文献

1、OpenCV轻松入门
李立宗,OpenCV轻松入门,电子工业出版社,2023
在这里插入图片描述

2、计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE-02笔记【封装~this和static】

文章目录 1.封装(掌握)1.1 封装的理解1.2 不封装存在的问题1.3 怎么封装1.4 难点解惑1.5 练习 2. this 和 static2.1 this(掌握)2.1.1 this是什么2.1.2 this 在实例方法中使用2.1.3 this访问实例变量2.1.4 this扩展①2.1.5 this扩…

林浩然与杨凌芸的Java时光魔法:格式化历险记

林浩然与杨凌芸的Java时光魔法:格式化历险记 The Java Time Odyssey of Lin Haoran and Yang Lingyun: A Formatting Adventure 在编程世界的一隅,有一个名叫林浩然的程序员。他是个Java大侠,对代码世界的法则了如指掌,尤其擅长驾…

Vue2学习第三天

Vue2 学习第三天 1. 计算属性 computed 计算属性实现 定义:要用的属性不存在,要通过已有属性计算得来。 原理:底层借助了Objcet.defineproperty方法提供的getter和setter。 get函数什么时候执行? 初次读取时会执行一次。当依赖…

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下: Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…

人工智能学习与实训笔记(十四):Langchain Agent

0、概要 Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑,以制定解决问题的计划、借助工具实施动作。在agents中几个关键组件如下: Agent:制定计划和思考下一步需要采取的行动。Tools…

H12-821_44

44.如图所示的网络,R1设备配置路由渗透,那么R1设备把Level-2的LSP发送给R3,使R3可以获知全网路由。 A.正确 B.错误 答案:B 注释: 感觉题目描述有两个问题: 1. R3是Level-1-2路由器,本来就可以学习到Level-2的路由。题目中的R3应该…

会声会影支持哪些视频格式 会声会影2024软件下载 会声会影序列号在哪里购买

时常有朋友遇到这样的烦恼,就是从网络上下载下载来的视频,不能够导入到会声会影里面。这到底是怎么回事,到底支持哪些视频格式呢?下面小编将来给大家介绍一下。 还没有下载会声会影2024的朋友可以通过这个链接下载:ht…

mysql 执行update操作 记录未修改

问题 mysql 执行update操作 记录未修改 详细问题 笔者进行SpringBootMybatis项目开发,确认执行update操作 控制台内容如下 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession3cbe9459] was not registered for sync…

【c++】list详细讲解

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟悉list库 > 毒鸡汤:你的脸上云淡…

OpenAI Sora是世界模型?

初见Sora,我被OpenAI的野心震撼了。 他们不仅想教会AI理解视频,还要让它模拟整个物理世界!这简直是通用人工智能的一大飞跃。 但当我深入了解后,我发现Sora比我想象的更复杂、更强大。 Sora不是简单的创意工具,而是…

【BBuf的CUDA笔记】十四,OpenAI Triton入门笔记二

0x0. 前言 接着【BBuf的CUDA笔记】十三,OpenAI Triton 入门笔记一 继续探索和学习OpenAI Triton。这篇文章来探索使用Triton写LayerNorm/RMSNorm kernel的细节。 之前在 【BBuf的CUDA笔记】十二,LayerNorm/RMSNorm的重计算实现 这篇文章我啃过Apex的La…

Caffeine本地缓存

Caffeine本地缓存 Caffine简介 简单说,Caffine 是一款高性能的本地缓存组件,由下面三幅图可见:不管在并发读、并发写还是并发读写的场景下,Caffeine的性能都大幅领先于其他本地开源缓存组件 常见的缓存淘汰算法 FIFO 它…

电源管理芯片是指在电子设备系统中,负责对电能的变换、分配、检测等进行管理的芯片

萨科微半导体宋仕强介绍说,电源管理芯片是指在电子设备系统中,负责对电能的变换、分配、检测等进行管理的芯片,其性能和可靠性直接影响电子设备的工作效率和使用寿命,是电子设备中的关键器件。萨科微slkor(www.slkormi…

wps使用方法(包括:插入倒三角符号,字母上面加横线,将word中的所有英文设置为time new roman)

倒三角符号 字母上面加横线 将word中的所有英文设置为time new roman ctrla选中全文

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec:skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

使用Taro开发鸿蒙原生应用——快速上手,鸿蒙应用开发指南

导读 本指南为开发者提供了使用 Taro 框架开发鸿蒙原生应用的快速入门方法。Taro,作为一个多端统一开发框架,让开发者能够使用一套代码同时适配多个平台,包括鸿蒙系统。文章将详细介绍如何配置开发环境,以及如何利用 Taro 的特性…

MATLAB知识点:datasample函数(★★☆☆☆)随机抽样的函数,能对矩阵数据进行随机抽样

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第3章:课后习题讲解中拓展的函数 在讲解第三…

.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2

前言 很多同学都不愿给电脑设动态壁纸,其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费(MIT license)的一个小而快并且功能强大的 Windows 动态桌面软件,支持视频和网页动画播放:DreamScene2。 …

Android 车载应用开发之SystemUI 详解

一、SystemUI SystemUI全称System User Interface,直译过来就是系统级用户交互界面,在 Android 系统中由SystemUI负责统一管理整个系统层的 UI,它是一个系统级应用程序(APK),源码在/frameworks/base/packages/目录下,而不是在/packages/目录下,这也说明了SystemUI这个…

【C语言】模拟实现库函数qsort

qsort的头文件是stdlib.h 他的四个参数分别是要进行排序的数组base的首地址,base数组的元素个数,每个元素的大小,以及一个函数指针,这个函数指针指向了一个函数,这个函数的参数是两个void*类型的指针,返回类…