《深度学习》OpenCV轮廓检测 轮廓近似 解析及实现

news2024/12/26 20:56:53

目录

一、轮廓近似

1、什么是轮廓近似

2、参数解析

1)用法

2)参数

3)返回值

4)代码解析及实现

运行结果为:

二、总结

1、概念

2、轮廓近似的步骤:


一、轮廓近似

1、什么是轮廓近似

        指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状

2、参数解析

1)用法
import cv2
approx =cv2.approxPolyDP(curve,epsilon, closed)

2)参数

        • curve:表示要输入的轮廓

        • epsilon: 表示近似的精度,即两个轮廓之间最大欧氏距离,该参数越小,得到的近似结果越接近实际轮廓,反之得到的近似结果会更加粗糙

         • closed:表示布尔类型的参数,表示是否封闭轮廓,如果是True,表示输入的轮廓是封闭的,近似结果也会是封闭的,否则表示输入的轮廓不是封闭的,近似结果也不会封闭

3)返回值

        approx:表示近似结果,是一个ndarray数组,为一个近似后的轮廓,包含了被近似出来的轮上的点的坐标

4)代码解析及实现
import cv2
img = cv2.imread('phone.png')  # 导入原图
phone_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  # 原图转换为灰度图
ret,phone_thresh = cv2.threshold(phone_gray,100,25,cv2.THRESH_BINARY)  # 二值化,将大于100灰度值的像素更改为0,小于100像素值的更改为25
# 返回值ret为阈值,phone_thresh为二值化后的图像

image, contours, hierarchy = cv2.findContours(phone_thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)  # 将二值化后的图像进行获取轮廓处理
# 轮廓检测方式为cv2.RETR_TREE,返回所有轮廓及完整层次结构,CV2.CHAIN_APPROX_NONE为存储所有的轮廓点

epsilon = 0.001 * cv2.arcLength(contours[0],True)  # 设置近似值,计算轮廓为contours[0]的周长,参数true表示轮廓为封闭的,0.001表示精度,计算的结果越小,近似的精度越高
approx = cv2.approxPolyDP(contours[0],epsilon,True)  # 对轮廓进行近似,轮廓号为contours[0],近似的精度为epsilon,封闭轮廓
phone_new = img.copy()  # 对原图生成一个副本


image_contours = cv2.drawContours(phone_new, [approx],contourIdx=-1,color=(0,255,0),thickness=3)  # 在副本图像上进行绘制轮廓,[approx]表示要回值得轮廓,contourIdx=-1表示绘制所有的轮廓
cv2.imshow('phone',img)   # 展示原图
cv2.waitKey(0)
cv2.imshow('image_contours',image_contours)   # 展示绘制轮廓的近似图像
cv2.waitKey(0)
运行结果为:

前者为原图,后者为在原图副本上进行绘制轮廓

二、总结

1、概念

        轮廓检测是指从图像中提取出对象的边界。它基于图像的边缘信息,通过对图像进行二值化处理,找到图像中的连通区域,然后提取出每个连通区域的边界轮廓。

        轮廓近似是指对提取出的轮廓进行简化,以减少轮廓点的数量。这在某些情况下很有用,比如当我们只关心轮廓的形状而不关心细节时,可以用较少的点来表示轮廓,从而减少计算量。

        OpenCV提供了多种轮廓近似的方法,包括Douglas-Peucker算法和Ramer-Douglas-Peucker算法。这些算法都是基于分治的思想,通过递归地将曲线分割为多个小段,并将每个小段用直线段来近似表示。

2、轮廓近似的步骤:

  1. 首先,需要通过轮廓检测得到对象的轮廓。
  2. 然后,使用OpenCV的approxPolyDP函数对轮廓进行近似。
  3. approxPolyDP函数需要传入多个参数,其中最重要的是epsilon参数,它控制了近似的精度。较大的epsilon值会得到较少的点,较小的epsilon值会得到更多的点。
  4. 最后,可以通过绘制轮廓的近似结果来观察近似的效果。

        总的来说,OpenCV的轮廓检测和轮廓近似功能可以帮助我们提取图像中对象的边界,并对边界进行简化表示。这对于图像分析、物体识别和计算机视觉任务等方面都非常有用。

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

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

相关文章

Apache Pig

目录 一、配置说明1.本地模式2.集群模式 二、pig的数据模型三、pig的数据类型四、惰性执行五、pig的基本语法5.1语法说明5.2案例操作 六、pig的自定义函数 一、配置说明 1.本地模式 操作的是Linux系统文件 pig -x local关键日志 当前处于root目录下 2.集群模式 连接的是…

数据结构之堆的创建

1、堆的概念及结构 1.1堆的概念 如果有一个关键码的集合K{k0,k1,k2,…,kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足ki<k2i1且ki<k2i2&#xff08;或满足ki>k2i1且ki>k2i2&#xff09;&#xff0c;其中i0…

Windows环境下SD卡多分区 隐藏分区 解决python裸读写扇区失败

SD卡分区 右键“我的电脑”->“管理”->“磁盘管理”&#xff1b; 如果SD卡有文件系统&#xff0c;点击"删除卷"&#xff0c;重新做卡&#xff1b; 删除文件系统后如下图&#xff0c;点击“新建简单卷”&#xff1b; 在导航页“指定卷大小”&#xff0c;设置…

61.以太网数据回环实验(4)以太网数据收发器发送模块

&#xff08;1&#xff09;状态转移图&#xff1a; &#xff08;2&#xff09;IP数据包格式&#xff1a; &#xff08;3&#xff09;UDP数据包格式&#xff1a; &#xff08;4&#xff09;以太网发送模块代码&#xff1a; module udp_tx (input wire gmii_txc …

网络层_计算机网络

文章目录 网络层数据平面路由器工作原理网际协议&#xff08;*IP*&#xff09;IPv4IPv6DHCP NAT 控制平面路由选择算法因特网中自治系统内部的路由选择&#xff1a;OSPFISP 之间的路由选择&#xff1a;BGP ICMPSNMP 网络层 尽力而为服务&#xff08;best-effort services&…

尚品汇-支付宝介绍、跳转支付订单页面实现(四十六)

目录&#xff1a; &#xff08;1&#xff09;支付宝介绍 &#xff08;1&#xff09;支付宝介绍 &#xff08;3&#xff09;显示付款页面信息 &#xff08;5&#xff09;创建支付控制器PaymentController &#xff08;1&#xff09;支付宝介绍 支付宝简介 支付宝&#xf…

没资料的屏幕怎么点亮?思路分享

这次尝试调通一个没资料的屏幕&#xff0c;型号是HYT13264&#xff0c;这个是淘宝上面的老王2.9元屏&#xff0c;成色很好但是长期库存没有资料和代码能点亮&#xff0c;仅仅只有一个引脚定义。这里我使用Arduino Nano作为控制器尝试点亮这个模块。 首先&#xff0c;已知别人找…

当水泵遇上物联网:智能水务新时代的浪漫交响

在当代科技的宏伟乐章中&#xff0c;物联网&#xff08;IoT&#xff09;技术宛如一位技艺高超的指挥家&#xff0c;引领着各行各业迈向智能化的新纪元。当这股创新浪潮涌向古老的水务行业时&#xff0c;一场前所未有的“智能水务”革命便悄然上演&#xff0c;而水泵——这一传统…

vue3 自定义指令 directive

1、官方说明&#xff1a;https://cn.vuejs.org/guide/reusability/custom-directives 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式&#xff1a;组件和…

828华为云征文 | 华为云Flexusx实例,高效部署Servas书签管理工具的优选平台

需要了解 本文章主要讲述在 华为云Flexus X 实例上使用docker快速部署Servas&#xff0c;一款功能强大的自托管书签管理工具&#xff0c;专为追求高效与个性化的用户设计。选择合适的云服务器&#xff1a; 本文采用的是 华为云服务器 Flexus X 实例&#xff08;推荐使用&#x…

Vue 中 watch 和 watchEffect 的区别

watch 和 watcheffect 都是 vue 中用于监视响应式数据的 api&#xff0c;它们的区别在于&#xff1a;watch 用于监视特定响应式属性并执行回调函数。watcheffect 用于更通用的响应式数据监视&#xff0c;但回调函数中不能更新响应式数据。Vue 中 watch 和 watchEffect 的区别 …

C++ 日历计算器的实现

日历计算器 创建一个日期类对运算符进行重载代码 创建一个日期类 年月日为类的成员变量&#xff0c;所以放到私有区域&#xff0c;又因为成员变量为内置类型&#xff0c;编译器自动生成的默认构造函数对其不做处理&#xff0c;所以需要我们显示定义一个构造函数&#xff0c;而…

亿发:中小型制造企业数字化转型典型场景、痛点、解决方案

随着全球制造业的不断发展&#xff0c;中小型制造企业正面临前所未有的挑战和机遇。数字化转型成为了企业提升竞争力、优化生产效率、应对市场变化的关键路径。然而&#xff0c;对于资源相对有限的中小型制造企业而言&#xff0c;数字化转型并非易事。他们在推进转型的过程中往…

视频的编码与传输 学习笔记2 信息论

说白了&#xff0c;关键点就三个&#xff1a;信源&#xff0c;压缩与信道 DMS就是无记忆的信源&#xff0c;该输出什么就输出什么。 马尔卡夫信源&#xff0c;准确来讲是m马尔卡夫&#xff0c;会受到前m个状态的影响。&#xff08;妈的&#xff0c;马尔卡弗还在追我&#xff0c…

【工具分享】针对加解密综合利用后渗透工具 - DecryptTools

下载地址&#xff1a; 链接: https://pan.quark.cn/s/2e451bd65d79工具介绍 支持22种OA、CMS 加解密密码查询功能 万户OA 用友NC 金蝶EAS 蓝凌OA 致远OA 宏景ERP 湖南强智 金和jc6 瑞友天翼 金和C6 Navicat 华天动力 FinalShell 亿赛通 帆软报表 H3C CAS Weblogic 金蝶云星空…

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的…

51单片机-第十二节-LCD1602液晶显示屏

一、LCD1602介绍&#xff1a; LCD1602是一种字符型液晶显示屏&#xff0c;可以显示ASCII码的标准字符和其他的内置特殊字符。 显示容量&#xff1a;16*2个字符&#xff0c;每个字符为5*7点阵。 二、引脚及应用电路&#xff1a; 其中&#xff1a;D0-7这8位数据是接在P0引脚上…

聚焦2024数博会|与天空卫士一起探索AI与数据安全的融合应用

中国国际大数据产业博览会&#xff08;简称数博会&#xff09;&#xff0c;是全球首个以大数据为主题的博览会&#xff0c;自2015年创办以来&#xff0c;经过多年的深厚沉淀&#xff0c;数博会已发展成为国际知名、引领前沿趋势的专业展示合作平台。 2024年8月28日至30日&#…

T1打卡——mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.定义GPU import tensorflow as tfgpustf.config.list_physical_devices("GPU")if gpus:gpu0gpus[0]tf.config.experimental.set_memort_groth(gp…

重卡换电连接器的应用

电动汽车换电模式涉及在专门充电站集中存储和充电大量电池&#xff0c;实现统一配送&#xff0c;并在换电站对电动汽车进行快速电池更换服务&#xff0c;或整合充电、物流、调配和换电服务。新能源汽车面临续航限制和配套设施不完善等问题&#xff0c;影响了其大规模推广。电池…