在OpenCV中使用Canny边缘检测

news2024/12/23 4:57:51

边缘检测是非常常见和广泛使用的图像处理,对于许多不同的计算机视觉应用非常必要,如数据提取,图像分割,在更细粒度的特征提取和模式识别中。它降低了图像中的噪声和细节数量,但保留了图像的结构。

Python中的Canny边缘检测是计算机视觉中最流行的边缘检测方法之一。以下是Canny边缘检测的步骤:

1.使用高斯平滑来减少噪声

2.计算梯度

3.应用非极大值抑制以减少噪声

4.找到上下阈值

5.应用阈值。

幸运的是,OpenCV库有cv2.canny()函数,可为我们执行Canny边缘检测。

在本文中,我们将直接使用OpenCV执行边缘检测。

import cv2 
import matplotlib.pyplot as plt

我们将使用以下图片进行今天的教程:

0769cd124831cb4ebece07955b7cdf64.jpeg

Canny边缘检测的第一步是应用高斯模糊。在模糊之前,将图像转换为灰度也很重要:

image = cv2.imread("meter.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)

现在,我们可以直接将cv2.Canny()方法应用于这个模糊的图像。

很简单。它需要三个参数:图像本身,较低的阈值和较高的阈值。选择这些阈值是棘手的。对于每个图像,这些阈值都将是不同的。

对于此图像,我们将尝试三个不同的范围并观察发生了什么:

wide = cv2.Canny(blurred, 50, 200)
mid = cv2.Canny(blurred, 30, 150)
tight = cv2.Canny(blurred, 210, 250)

在这里,我使用了三种不同类型的范围。在wide中,阈值的值具有宽范围。在mid中,阈值的值在中间范围内,在tight中,阈值的值具有紧密的范围,仅为210到250,非常接近。

为了检查图像,我只保存了这三个图像(wide,mid和tight)。

以下是wide的结果:

8735420cb9302647eacd59977dd253cc.jpeg

这是mid范围的结果:

afc239f2eba09baca136200cd2afcc52.jpeg

tight的结果:

9b0235535a0c5b3944f0fbf844e29c74.jpeg

如果我们注意这三张图片,我相信中等范围给出了更加坚实的边缘。

记住,你不能一概而论这些范围。对于不同的图像,可能需要使用不同的范围。这就是为什么这么棘手的原因。

好消息是,有一些可用的统计技巧可以用来找到下限和上限阈值,而不需要像我们之前看到的试错方法那样。

这是自动边缘检测的函数:

def auto_canny_edge_detection(image, sigma=0.33):
    md = np.median(image)
    lower_value = int(max(0, (1.0-sigma) * md))
    upper_value = int(min(255, (1.0+sigma) * md))
    return cv2.Canny(image, lower_value, upper_value)

在上面的函数中,首先找到图像数组中的中位像素值。然后使用这个中位数和一个常数sigma值,可以找到下限和上限阈值。

这里使用了一个sigma值为0.33。在大多数应用程序中,0.33作为sigma值是有效的。但在某些情况下,如果它不能给出好的结果,请尝试一些其他的sigma值。

这是我们之前创建的模糊图像上使用auto_canny_edge_detection方法的结果:

auto_edge = auto_canny_edge_detection(blurred)
cv2.imwrite("auto.jpg", auto_edge)

这就是auto.jpg的样子:

1472573c9f23561606aee18439491ca1.jpeg

正如你所看到的,边缘在这里很清晰地出现了,而不需要尝试太多的阈值。

结论

在我看来,自动边缘检测函数为我们提供了最好的结果。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

ad83cb2aae566f63dd0919aeb32d6021.jpeg

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

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

相关文章

祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说

在祁宁家里,有一套完整的赛车模拟器,他甚至还请人到国外代购了最新的 VR 设备。作为沉浸式赛车游戏发烧友,除了享受速度与激情带来的愉悦感,祁宁在玩的过程中更多的是思考如何将技术能力进行产品化的问题。 Answer.dev 就是将技术…

Studio Bot - 让 AI 帮我写 Android 代码

Google I/O 2023 不出所料,今年的 I/O 大会只突出了一个关键词 “AI”。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能,希望通过 AI 帮助开发者更轻松地写代码: Studio Bot…

STM32F4_内部温度传感器

目录 1. 什么是温度传感器 2. 温度传感器简介 3. 库函数配置内部温度传感器 4. 实验程序 4.1 main.c 4.2 ADC.c 4.3 ADC.h 1. 什么是温度传感器 温度传感器是一种测量物体冷热程度的设备,以可读的方式通过电信号提供温度测量。比较常见的如热电偶温度传感器。…

越来越多的单身女性开始买房了

近日,越来越多的单身女性开始购买房产,这一现象引起了社会的广泛关注。 根据中国青年报社会调查中心联合问卷网对2006名受访者进行的一项调查显示,84.2%的受访者认为近几年身边单身女性购房的现象增多了,而93.9%的受访者支持单身女…

无监督域适应 (UDA)(3)

本帖介绍基于 bi-classifier adversarial learning 的改进。 一、动机 模型训练在两个步骤之间交替进行:(I)约束两个分类器的学习,以最大化未标记目标域数据的预测差异;(II)约束特征提取器的学习,以最小化这种差异。 尽管这种方法是一种优雅的表述&am…

Call for Papers丨第一届LLM@IJCAI‘23 Symposium,大会主席陈雷、杨强、唐杰

大规模语言模型(LLMs),如ChatGPT和GPT-4,以其在自然语言理解和生成方面的卓越能力,彻底改变了人工智能领域。 LLMs广泛用于各种应用,如语音助手、推荐系统、内容生成模型(如ChatGPT&#xff09…

开源进展 |WeBASE更新啦,快来了解新特性!

WeBASE(WeBank Blockchain Application Software Extension) 是在区块链应用和FISCO BCOS底层之间搭建的一套通用组件,围绕交易、合约、密钥管理、数据、可视化管理来设计各个模块,屏蔽了区块链底层的复杂度,从而极大降…

多模态GPT:国内发布一款可以在线使用的多模态聊天机器人!快来把玩~

论文: MultiModal-GPT: A Vision and Language Model for Dialogue with Humans代码: https://github.com/open-mmlab/Multimodal-GPT (包含代码、数据、demo)作者:OpenMMLab 深度学习自然语言处理 原创作者: 林哲乐 使用视觉和语言指令训练一…

Linux基础学习---3、时间日期类、用户管理命令、用户组管理命令

1、时间日期类 1、基本语法date [Option] ...[Format]2、选项说明 选项功能-d<时间字符串>显示指定的“时间字符串”表示的时间&#xff0c;而非当前时间-s<日期时间>设置日期时间 3、参数说明 参数功能<日期时间格式>指定显示时使用的日期时间格式 1.1…

一、数据库设计

整个项目的设计包括5个数据库&#xff1a; glkt_activity:优惠券的相关设计 glkt_order:订单的相关设计 glkt_user:得到微信授权的账号信息的相关设计 glkt_vod:课程信息的相关设计 glkt_wechat:微信公众号的相关设计 glkt_activity&#xff1a; coupon_info:优惠券的信息 cou…

java+iClient Openlayers实现土壤墒情旱情灾害模拟预报预警分析

应用及软件实现效果图&#xff1a; 一、应用背景 作为一个农村长大的人&#xff0c;我非常关注自然灾害和气候变化对土地旱情墒情影响。近年来&#xff0c;干旱和洪涝灾害在很多地方频繁发生&#xff0c;给人们的生命财产安全带来了极大的威胁。因此&#xff0c;旱情和墒情模拟…

在计算语义相似度中,我看网上说要加range,我不知道往哪里加?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 行宫见月伤心色&#xff0c;夜雨闻铃肠断声。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银交流群【王王雪饼】问了一个Python处理语义相…

Python学习历程-元组的基本操作回顾

在学习元组之前&#xff0c;我们先再回过头看看之前写过的文章&#xff0c;看看列表的一些基本操作&#xff1a; Python中的列表介绍 记录我的Python学习历程-列表的基本操作&#xff0c; 接下来再快速回顾一下元组的一些重点&#xff1a; 列表属于可变序列&#xff0c;元组、字…

Powerlink协议使用极简入门教程

网上关于powerlink协议的知识太少&#xff0c;而且都太分散太零碎&#xff0c;容易让人一头扎进去摸不着头绪。新手看到demo源码可能都不知道有什么用途&#xff0c;怎么能联动的跑起来看到效果&#xff0c;有种无从下手的感觉。其实Powerlink协议的使用挺简单&#xff0c;特别…

STM32F4_光敏传感器

目录 1. 什么是光敏传感器、光敏电阻 2. 硬件分析 3. 实验程序 3.1 main.c 3.2 ADC3.c 3.3 ADC3.h 3.4 Lightsensor.c 3.5 Lightsensor.h 1. 什么是光敏传感器、光敏电阻 光敏传感器也称为光电传感器。是利用光电器件把光信号转换成电信号的一种传感器。它的敏感波长在…

opencv实践项目-多张图片拼接之stitcher

目录 1.简介2. 拼接算法流程3. 代码演示 1.简介 OpenCV从2.4.x版本之后多出来一个新的模型 图像拼接&#xff0c;该模块通过简单的高级API设置&#xff0c;可以获得比较好的图像拼接效果&#xff0c;OpenCV官方提供了一个高度集成的API函数 Stitcher&#xff0c;只要两行代码就…

SRE/DevOps不得不懂的:Prometheus的配置工程化!

原创不易&#xff0c;还请关注和转发&#xff5e;谢谢 背景 Prometheus有两个最基本的组件&#xff1a;一个是Prometheus程序&#xff0c;一个是Alertmanager程序。 它们的职责分工很明确&#xff1a; • Prometheus程序负责&#xff1a;定时拉取监控指标数据、存储指标数据、根…

谈谈IOC容器和AOP编程

Java发展的路途中&#xff0c;由刚开始的使用new创建对象&#xff0c;到使用抽象类&#xff0c;接口进行解耦&#xff0c;又到了提问时刻&#xff0c;什么是耦合度&#xff1f; 对于这个对象的关联和依赖关系&#xff0c;例如&#xff1a; 当一个对象要使用&#xff0c;但是&…

4.6k Star,SpringBoot+Vue+App+硬件实现的智能家居系统,一套带走

今天&#xff0c;推荐一个智能家居系统项目。这是我目前见过的最好的智能家居系统项目&#xff0c;功能完整&#xff0c;代码结构清晰。值得推荐。 4.6k Star&#xff0c;SpringBootVueApp硬件实现的智能家居系统&#xff0c;一套带走 简介 FastBee是一个简单易用的物联网平…

Cocos Shader实现HSL和RGB颜色模型

HSL和RGB是两种常见的颜色模型&#xff0c;被广泛应用于计算机图形学、数字图像处理、Web设计等领域。在进行颜色处理时&#xff0c;经常需要将HSL和RGB相互转换&#xff0c;本demo演示如何通过Cocos Creator 3.7游戏引擎&#xff0c;用HSL模型来调节图片颜色&#xff0c;并详细…