opencv-图像轮廓

news2024/9/23 19:23:53

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
• 为了更加准确,要使用二值化图像。在寻找轮廓之前要进行阈值化处理或者 Canny 边界检测
• 查找轮廓的函数会修改原始图像。如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中。
• 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应该记住,要找的物体应该是白色而背景应该是黑色。
让我们看看如何在一个二值图像中查找轮廓:
cv2.findContours() 是 OpenCV 中用于查找图像中轮廓的函数。该函数的基本语法如下:

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

参数说明:

  • image: 输入图像,通常为二值图像(例如阈值化后的图像)
  • mode: 轮廓检索模式,有如下几种选择:
    • cv2.RETR_EXTERNAL: 只检测最外层的轮廓。
    • cv2.RETR_LIST: 检测所有轮廓,不建立轮廓层次。
    • cv2.RETR_CCOMP: 检测所有轮廓,建立两层轮廓层次。
    • cv2.RETR_TREE: 检测所有轮廓,建立完整的轮廓层次。
  • method: 轮廓逼近方法,有如下几种选择:
    • cv2.CHAIN_APPROX_NONE: 存储所有的轮廓点。
    • cv2.CHAIN_APPROX_SIMPLE: 压缩水平、垂直和斜率方向的元素,只保留其端点。
    • cv2.CHAIN_APPROX_TC89_L1cv2.CHAIN_APPROX_TC89_KCOS: 应用 Teh-Chin 链逼近算法。
  • contours: 输出参数,存储检测到的轮廓。
  • hierarchy: 输出参数,存储轮廓的层次信息。
  • offset: 可选参数,偏移值,通常不需要使用。
import cv2
# 读取图像
img = cv2.imread( r"C:\Users\mzd\Desktop\opencv\images.jpg")
# 将图像转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用阈值处理图像
ret, thresh = cv2.threshold(gray, 127, 255, 0)

# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 在原始图像上绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)

# 显示原始图像和带有轮廓的图像
cv2.imshow('Original Image', img)
cv2.imshow('Contour Image', thresh)

# 等待用户按下任意键
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

这个示例演示了如何使用 cv2.findContours() 函数查找图像中的轮廓,并使用 cv2.drawContours() 函数在原始图像上绘制这些轮廓。

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

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

相关文章

便携式自动气象站让你随时随地掌握天气变化

WX-BXQX12 随着科技的发展,人们对气象信息的掌握越来越重要。无论是在日常生活中,还是在农业生产、旅游出行等领域,了解天气变化都显得至关重要。为了满足人们对气象信息的需求,一款名为“便携式自动气象站”的创新产品应运而生。…

​​​​​​​3分钟实现EG网关串口连接麦格米特PLC

EG网关串口连接麦格米特PLC 前言:麦格米特PLC广泛应于工业控制领域,是一款性能高、稳定性强的PLC设备。此文档将介绍如何使用EG系列网关通过串口连接麦格米特PLC,并添加到EMCP物联网云平台,实现电脑Web页面、手机APP和微信对麦格米…

Oracle与Redis Enterprise协同,作为企业缓存解决方案

来源:虹科云科技 虹科干货丨Oracle与Redis Enterprise协同,作为企业缓存解决方案 欢迎关注虹科,为您提供最新资讯! 单独使用Oracle作为企业缓存数据库时,会出现哪些问题呢?使用Redis Enterprise与Oracle共…

新生儿近视:原因、科普和注意事项

引言: 近年来,新生儿近视的发病率逐渐上升,引起了广泛关注。新生儿近视的原因复杂,可能受到遗传、环境和行为等多方面因素的影响。本文将深入解析新生儿近视的原因,提供相关科普知识,并为父母和监护人提供…

Linux学习第44天:Linux 多点电容触摸屏实验(二):难忘记第一次牵你手的温存

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图内容如下: 二、硬件原理图分析 三、实验程序编写 1、修改设备树 1)、添加FT5426所使用的IO 一个复位 IO、一个中断 IO、…

代码随想录算法训练营第四十二天【动态规划part04】 | 01背包、416. 分割等和子集

01背包问题 题目链接: 题目页面 求解思路: 确定dp数组及其下标含义:dp[i][j] 表示从下标为 [0] 到 [i] 的物品里任意选取,放进容量为j的背包,此时的价值总和最大值确定递推公式: 不放物品i,…

常见树种(贵州省):006栎类

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、麻栎 …

suricata识别菜刀流量

一、捕获菜刀流量 payload特征&#xff1a; PHP: <?php eval($_POST[caidao]);?> ​ ASP: <%eval request(“caidao”)%> ​ ASP.NET: <% Page Language“Jscript”%><%eval(Request.Item[“caidao”],“unsafe”);%>数据包流量特征&#xff1a; …

第二证券:大盘仍有向上修复空间

大盘周二冲高轰动&#xff0c;上档均线压力显着。沪指当日小幅低开后快速反弹&#xff0c;盘中指数打破60日均线后不坚决加大。跟着午后抛压显着加重&#xff0c;指数回落并在收盘前翻绿。深成指全日走势同沪指相仿&#xff0c;跌幅高于沪指。值得一提的是&#xff0c;大盘自8月…

python数据结构与算法-13_高级排序算法-分治法

分治法 (Divide and Conquer) 很多有用的算法结构上是递归的&#xff0c;为了解决一个特定问题&#xff0c;算法一次或者多次递归调用其自身以解决若干子问题。 这些算法典型地遵循分治法的思想&#xff1a;将原问题分解为几个规模较小但是类似于原问题的子问题&#xff0c;递…

C盘变红怎么办?一个快速解决C盘快满的方法

前情提要 通常解决C盘快满的方法是&#xff1a; 找到C盘—右击选择“属性”—选择“详细信息”—卸载不常用的软件或者清除临时文件 缺点&#xff1a;成效甚微 今日重点 1.背景知识&#xff1a;微信是我们日常工作和生活都离不开的工具&#xff0c;我们每天使用微信会产生大量…

系列四、ThreadLocal的工作原理

一、内存结构图 二、工作原理 &#xff08;1&#xff09;Thread有一个类型为ThreadLocal.ThreadLocalMap threadLocals 的实例变量&#xff0c;即每个线程都有一个属于自己的ThreadLocalMap&#xff1b; &#xff08;2&#xff09;ThreadLocalMap内部维护着Entry数组&#xff0…

用合成数据训练语义分割模型【裂缝检测】

最近&#xff0c;我们推出了合成裂缝分割数据集&#xff0c;在本文中&#xff0c;我们将深入探讨应用于合成数据生成过程的改进和启发式方法。 阅读完这篇文章后&#xff0c;你将了解我们如何设法创建一个数据集&#xff0c;该数据集可以像使用真实数据一样高效地训练模型。 在…

干货分享:本地生活服务商入驻申请需要哪些条件?附更快捷的方法!

在数字化时代&#xff0c;本地服务市场已经成为各大平台争夺的重要阵地。抖音不仅在短视频市场占有一席之地&#xff0c;同时也在如火如荼的开发着本地服务市场&#xff0c;相继支付宝、视频号也推出了本地生活服务商模式。本文将介绍抖音本地生活服务商的申请条件&#xff0c;…

Django ORM 执行复杂查询的技术与实践

概要 Django ORM&#xff08;Object-Relational Mapping&#xff09;是 Django 框架的核心组件之一&#xff0c;提供了一种高效、直观的方式来处理数据库操作。尽管简单查询在 Django ORM 中相对容易实现&#xff0c;但在面对复杂的数据请求时&#xff0c;需要更深入的了解和技…

申银万国期货通过ZStack Cube信创超融合一体机打造金融信创平台

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…

HUAWEI华为MateBook X Pro 2022 12代酷睿版(MRGF-16)笔记本电脑原装出厂Windows11系统工厂模式含F10还原

链接&#xff1a;https://pan.baidu.com/s/1ZI5mR6SOgFzMljbMym7u3A?pwdl2cu 提取码&#xff1a;l2cu 华为原厂Windows11系统工厂包&#xff0c;带F10一键智能还原恢复功能。 自带指纹、面部识别、声卡、网卡、显卡、蓝牙等所有驱动、出厂主题壁纸、Office办公软件、华为…

早安,朋友!每天问候语祝你天天好心情,事事都顺意

1、今天的风儿轻柔无比&#xff0c;今天的花儿香飘万里&#xff1b;今天的鸟儿十分欢喜&#xff0c;今天的云儿满载笑意&#xff1b;今天的事儿万分顺利&#xff0c;今天的人儿如此甜蜜&#xff0c;所有美好的一切同我的早安连在一起&#xff0c;祝你天天好心情&#xff0c;事事…

【C++ 学习 ㊴】- 详解 C++ 的 I/O 流

目录 一、C 的 I/O 流 二、C 的标准 I/O 流 三、C 的文件 I/O 流 一、C 的 I/O 流 C 语言有一套完成数据读写&#xff08;I/O&#xff09;的解决方案&#xff1a; 使用 scanf()、gets() 等函数从键盘读取数据&#xff0c;使用 printf()、puts() 等函数向屏幕输出数据&#…