Opencv | 边缘提取

目录

  • 一. 边缘检测
    • 1. 边缘的定义
    • 2. Sobel算子 边缘提取
    • 3. Scharr算子 边缘提取
    • 4. Laplacian算子 边缘提取
    • 5. Canny 边缘检测算法
      • 5.1 计算梯度的强度及方向
      • 5.2 非极大值抑制
      • 5.3 双阈值检测
      • 5.4 抑制孤立弱边缘
  • 二. 轮廓信息
    • 1. 获取轮廓信息
    • 2. 画轮廓

一. 边缘检测

1. 边缘的定义

在这里插入图片描述

	边缘:像素值快速变化的区域,也就是像素值函数一阶导数的极值区域边缘信息:像素值明显变化的区域, 具有非常丰富的语义信息,常用于物体识别等领域

2. Sobel算子 边缘提取

	Sobel滤波作用:相当于先高斯去燥,再使用一阶导数获取极值导数对噪声非常敏感设计方式:[-a, 0 ,a]语法方法1:cv2.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]])参数:src:表示输入图像,即待处理的原始图像ddepth:表示输出图像的深度,当其值为负时(通常取-1),输出图像与输入图像有相同的深度dx:表示x方向上的求导阶数,若想计算水平方向的边缘,则设置为1dy:表示y方向上的求导阶数,若想计算垂直方向的边缘,则设置为1ksize:Sobel核的大小,默认为3,即3x3的矩阵如果该值为-1,则会使用Scharr算子进行运算scale:计算导数值时所采用的缩放因子,默认情况下该值是1,即无缩放delta:在结果中加入的一个可选的常数项,用于调节输出图像的亮度borderType:像素外推法选择项,用于处理图像边缘的像素作用:计算图像的一阶导数,通常用于边缘检测方法2:cv.filter2D()函数

在这里插入图片描述
d d x ( f ∗ g ) = f ∗ d d x g \frac{d}{d x}(f * g)=f * \frac{d}{d x} g dxd(fg)=fdxdg

  • SobelX:水平梯度/垂直边缘,提取垂直的边缘信息
    在这里插入图片描述
    经过SobelX提取的边缘信息为:
    在这里插入图片描述

  • SobelY:垂直梯度/水平边缘,提取水平的边缘信息
    在这里插入图片描述
    经过SobelY提取的边缘信息为:
    在这里插入图片描述

3. Scharr算子 边缘提取

	Scharr是Sobel算子的改进版,具有更好的性能和更高的精度

4. Laplacian算子 边缘提取

Δ s r c = ∂ 2 s r c ∂ x 2 + ∂ 2 s r c ∂ y 2 \Delta s r c=\frac{\partial^{2} s r c}{\partial x^{2}}+\frac{\partial^{2} s r c}{\partial y^{2}} Δsrc=x22src+y22src

	设计方式:[a, -2a, a]cv2.Laplacian(src, ddepth, ksize, scale=1, delta=0, borderType=BORDER_DEFAULT)参数:src:表示原始输入图像ddepth:表示目标图像的深度ksize:用于计算二阶导数的核(kernel)尺寸大小必须是正的奇数如果该参数未指定,则默认使用3x3的核scale:表示计算Laplacian值的缩放比例因子,该参数是可选的默认情况下,该值为1,表示不进行缩放delta:表示加到目标图像上的可选值,默认为0borderType:表示像素外推法选择项,用于处理图像边界作用:Laplacian滤波器在图像处理中常用于边缘检测和增强效果:块团检测:周边高于或者低于中心点的区域 边缘检测:像素值快速变化的区域特点:二阶微分算子作为梯度值不同点:与Sobel和Scharr滤波器不同,Laplacian滤波器对图像中的突变(即边缘)更加敏感,因为它使用的是二阶导数

5. Canny 边缘检测算法

Canny边缘检测算法是从不同视觉对象中提取有用的结构信息,是传统计算机视觉中非常广泛应用的一种边缘提取算法

	语法:cv2.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]])参数:image:表示要进行边缘检测的输入图像threshold1:第一个阈值,用于边缘连接,较小的值会导致更多边缘被检测到threshold2:第二个阈值,用于检测强边缘,较大的值将导致仅检测到强边缘apertureSize:可选参数,表示Sobel算子的孔径大小,默认值为3L2gradient:可选参数,表示是否使用L2范数计算梯度幅值,默认值为FalseCanny边缘检测算法通过以下步骤实现:使用高斯滤波平滑图像,减少图像中的噪声计算图像的梯度幅值和方向对梯度幅值应用非最大抑制,以得到细化的边缘使用两个阈值(threshold1和threshold2)来确定潜在的边缘通过抑制孤立的弱边缘,最终得到边缘检测结果。作用:	Canny算法能够有效地识别图像中的弱边缘和强边缘,并结合它们的位置关系,给出图像整体的边缘信息由于其优越的性能,Canny算法是目前最常用的边缘检测算法之一

5.1 计算梯度的强度及方向

强度: G = G x 2 + G y 2 强度:G=\sqrt{G_{x}^{2}+G_{y}^{2}} 强度:G=Gx2+Gy2
方向: θ = arctan ⁡ ( G y / G x ) 方向:\theta=\arctan \left(G_{y} / G_{x}\right) 方向:θ=arctan(Gy/Gx)

其中,Sobel算子为:
S x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] S y = [ 1 2 1 0 0 0 − 1 − 2 − 1 ] S_{x}=\left[\begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{array}\right] S_{y}=\left[\begin{array}{ccc} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{array}\right] Sx= 121000121 Sy= 101202101

因此:
G x = S x ∗ A = [ − 1 0 1 − 2 0 2 − 1 0 1 ] ∗ [ a b c d e f g h i ] = sum ⁡ ( [ − a 0 c − 2 d 0 2 f − g 0 i ] ) G_{x}=S_{x} * A=\left[\begin{array}{ccc} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{array}\right] *\left[\begin{array}{lll} a & b & c \\ d & e & f \\ g & h & i \end{array}\right]=\operatorname{sum}\left(\left[\begin{array}{ccc} -a & 0 & c \\ -2 d & 0 & 2 f \\ -g & 0 & i \end{array}\right]\right) Gx=SxA= 121000121 adgbehcfi =sum a2dg000c2fi

G y = S y ∗ A = [ 1 2 1 0 0 0 − 1 − 2 − 1 ] ∗ [ a b c d e f g h i ] = sum ⁡ ( [ a 2 b c 0 0 0 − g − 2 h − i ] ) G_{y}=S_{y} * A=\left[\begin{array}{ccc} 1 & 2 & 1 \\ 0 & 0 & 0 \\ -1 & -2 & -1 \end{array}\right] *\left[\begin{array}{lll} a & b & c \\ d & e & f \\ g & h & i \end{array}\right]=\operatorname{sum}\left(\left[\begin{array}{ccc} a & 2 b & c \\ 0 & 0 & 0 \\ -g & -2 h & -i \end{array}\right]\right) Gy=SyA= 101202101 adgbehcfi =sum a0g2b02hc0i

5.2 非极大值抑制

	属于一种边缘稀疏技术作用:主要作用就是构建“瘦”边 效果:非极大值抑制可以将局部最大值之外的所有梯度值抑制为0其构建过程:将当前像素的梯度强度与沿着正负梯度方向上的两个像素进行比较如果当前像素的梯度强度 > 另外两个像素,则该像素点保留为边缘点否则该像素点被抑制为0 

5.3 双阈值检测

在进行非极大值抑制后,剩余的像素可以更准确地表示图像中的实际边缘,但是有可能还是存在一些噪音数据形成的边缘像素,所以需要使用弱梯度值来过滤这些非实际的边缘像素,并保留高梯度的实际边缘值

	像素边缘的梯度值 > 高阈值,该像素为边缘,且为强边缘高阈值 > 像素边缘的梯度值 > 低阈值,该像素可能为边缘,且弱边缘像素边缘的梯度值 < 低阈值,则会将其抑制注意:对于可能为边缘的像素当该像素与强边缘相连,则保留为边缘当该像素未与强边缘相连,则直接丢弃即抑制孤立弱边缘

在这里插入图片描述

5.4 抑制孤立弱边缘

查看弱边缘像素及其周边的八个邻域像素:

	只要其中有一个为强边缘像素/真实边缘像素,则该弱边缘点被保留为真实边缘/强边缘像素

算法原理:真实的弱边缘像素一定是连接强边缘像素点的

二. 轮廓信息

轮廓信息可以简单的理解为从图像中获取图像曲线的连接点信息,在目标检测、目标识别等业务场景中,具有一定的效果

轮廓信息就是从图像中获取图像边缘信息,简单说就是,一张图片内有许多边缘信息,当我们需要获取某个形状的边缘信息时,可以通过轮廓信息进行查找

1. 获取轮廓信息

	contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])参数:image:输入的单通道图像矩阵通常是经过边缘检测算子处理的二值图像contours:双重向量其中每个元素包含由连续的Point点构成的点的集合,代表一个轮廓有多少轮廓,这个向量就有多少元素hierarchy:包含4个整型的向量,定义了图像中各个轮廓之间的等级关系mode:定义轮廓的检索模式CV_RETR_EXTERNAL:只检测最外围轮廓,内围轮廓被忽略CV_RETR_LIST:检测所有轮廓,包括内围和外围轮廓,但检测到的轮廓不建立等级关系,彼此之间独立CV_RETR_CCOMP:检测所有轮廓,并建立两个等级的轮廓层次关系;顶层是外部轮廓,底层是内部轮廓CV_RETR_TREE:检测所有轮廓,并建立完整的等级树状结构,每个轮廓都有相应的父轮廓或子轮廓method:定义轮廓的近似方法CV_CHAIN_APPROX_NONE:存储所有轮廓点,即不进行任何近似CV_CHAIN_APPROX_SIMPLE:仅存储轮廓的拐点信息,即对于一条直线上的点而言,仅仅保留端点信息CV_CHAIN_APPROX_TC89_L1:使用Teh-Chin链逼近算法,将轮廓近似为一条折线CV_CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链逼近算法,将轮廓近似为一条曲线offset:是可选参数,表示轮廓点相对于原始图像的偏移量返回值:contours:每个轮廓的坐标点信息hierarchy:轮廓之间的关系操作:先对图像进行预处理:转为灰度图像,阈值分割或边缘检测算法来获取二值图像随后使用该函数进行检测和提取图像中的轮廓,为后续的图像分析、目标识别或形状匹配等任务提供基础

2. 画轮廓

	cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])参数:image:输入单通道图像矩阵,通常是经过边缘检测算子处理的二值图像contours:双重向量contourIdx:要绘制的轮廓的索引如果为负数,则绘制所有轮廓color:表示绘制轮廓的颜色thickness:绘制轮廓的线条粗细如果为负数,则填充轮廓内部lineType:	表示绘制轮廓的线条类型,如:实线、虚线等hierarchy:包含4个整型的向量,定义了图像中各个轮廓之间的等级关系maxLevel:绘制轮廓的最大层级如果为0,则只绘制指定索引的轮廓如果大于0,则绘制指定索引及其子轮廓offset:可选参数,表示轮廓点相对于原始图像的偏移量作用:在图像中直观地显示轮廓信息

感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    【Opencv 图像变换代码实现

祝愉快🌟!


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

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

相关文章

自动化爬虫工具:you-get安装与使用

Windows下的安装命令&#xff1a; pip install you-get linux下的安装命令&#xff1a; pip3 install you-get 下载完成后&#xff0c;我们可以看到如下的警告&#xff0c;意思就是这个工具并未被添加到环境变量中&#xff0c;如果我们想在命令行中直接调用&#xff0c;需要…

sql今天学习总结

排序order by&#xff08;默认升序&#xff09; order by id desc(降序排序&#xff09; order by id,number&#xff08;先按id排再按name排序&#xff09; in,not in and or 通配符 where name like "Aa%";选取所有以Aa开头的名字 like "%r" 以r结…

Matlab 使用subplot绘制多个子图,一元拟合

实现效果&#xff1a; clc; clear;filename sri.xlsx; % 确认文件路径data readtable(filename); datavalue data{:,2:end}; datavalue datavalue;fig figure(Position, [0, 0, 1500, 900]); indexString ["(a)","(b)","(c)","(d)&qu…

python自动生成SQL语句自动化

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python自动生成SQL语句自动化 在数据处理和管理中&#xff0c;SQL&#xff08;Structured …

opencv图片绘制图形-------c++

绘制图形 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xf…

国外企业使用生成式人工智能实例100

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

将游戏界面与注册/登录界面连接到一起

一、 导包 在注册页面中导入一个import subprocess包 二、 使用代码将其连接到一起 在循环中加入下面这一行代码&#xff0c;用来实现效果 subprocess.run(["python", "game代码.py"]

Linux中的vi与vim:编辑器的王者之争与深度探索

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、vi与vim的历史与发展 …

符合医药行业规范的液氮罐运输和存储温度监测解决方案

API原料药、冻干物质和人体样本必须在玻璃相中以尽可能低的温度运输和存储。专门的低温容器——干式液氮罐——可通过液氮&#xff08;LN2&#xff09;将温度保持在-196 C。由于温度极低&#xff0c;低温容器的温度数据监测不仅具有挑战性&#xff0c;而且还需要更复杂的过程&a…

【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias 论文地址摘要&#xff1a;简介&#xff1a;3 方法论3.1 重温视觉变压器3.2 ViTAE3.3 缩减单元3.4 Normal cell3.5 模型细节 4 训练4.1 Implementation details4.2 Comparison with the state-of-the-…

云原生Service Mesh服务网格简单介绍

serviceMesh是什么 Service Mesh是一个用于处理服务间通信的基础设施层&#xff0c;旨在实现云原生应用复杂服务拓扑中的可靠请求传递。其基本构成是一组与应用一起部署的轻量级网络代理&#xff0c;这些代理对应用来说是透明的。Service Mesh通过统一的方式来控制和处理服务间…

EasyCVR视频汇聚平台无法自动播放视频的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

Canopen的cia402协议下通过SDO报文控制步进电机

Canopen的cia402协议控制步进电机 硬件搭建软件使用发送写SDO报文格式如下对于0x27、0x22、0x23、0x27、0x2B、0x2F解释简单的驱动器相关参数通常速度模式控制步骤如下 发送数据和驱动器返回数据如下图发送读SDO报文格式如下 硬件搭建 在某宝上随便买个支持CANopen协议的驱动&…

Redis入门到通关之数据结构解析-SkipList

文章目录 ☃️概述☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 博客特色&…

网站被SmartScreen标记为不安全怎么办?

在互联网时代&#xff0c;网站的安全性和可信度是用户选择是否继续访问的重要因素之一&#xff0c;然而&#xff0c;网站运营者偶尔会发现使用Edge浏览器访问网站时&#xff0c;会出现Microsoft Defender SmartScreen&#xff08;以下简称SmartScreen&#xff09;提示网站不安全…

文化旅游3D数字孪生可视化管理平台推动文旅产业迈向更加美好的未来

随着数字化、智能化管理成为文旅产业发展的必然趋势&#xff0c;数字孪生公司深圳华锐视点创新性地推出了景区三维可视化数字孪生平台&#xff0c;将线下的实体景区与线上的虚拟世界完美融合&#xff0c;引领智慧文旅新潮流。 我们运用先进的数字孪生、web3D开发和三维可视化等…

免费实用在线小工具

免费在线工具 https://orcc.online/ pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/ha…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

重生之我是Nginx服务专家

nginx服务访问页面白色 问题描述 访问一个域名服务返回页面空白&#xff0c;非响应404。报错如下图。 排查问题 域名解析正常&#xff0c;网络通讯正常&#xff0c;绕过解析地址访问源站IP地址端口访问正常&#xff0c;nginx无异常报错。 在打开文件时&#xff0c;发现无法…

Spring Cloud Alibaba 项目搭建步骤和注意事项

Spring Cloud Alibaba 是一个基于 Spring Cloud 的微服务架构解决方案&#xff0c;它整合了阿里巴巴的多款开源组件&#xff0c;如 Nacos、Sentinel、RocketMQ 等&#xff0c;用于构建分布式微服务系统。 以下是使用 Spring Cloud Alibaba 搭建项目的基本步骤和注意事项&#x…