opencv-python连通域分割connectedComponents

文章目录

    • 连通域简介
    • 绘图代码
    • 函数说明

连通域简介

所谓连通域,即Connected Component,是一组彼此相连的像素点的集合,这些像素点彼此之间可以假设一条互相链接的路径,路径上所有像素的灰度一致,或者符合某个特定的条件。

通过连通域分割,可以将图像中不同的目标区分开来,为进一步的处理打下基础,最常用的连通域滤波流程大致如下:图像灰度化->二值化->形态学处理->标记连通域,每一步的图像如图所示

在这里插入图片描述

其中,original是原图;gray是灰度图;binary是二值图像。由于硬币图案的颜色并不完全一致,所以在二值化时可能会出现不一致的情况,为此,需要通过腐蚀或者膨胀等形态学处理,将其内部涂抹均匀,从而得到一张目标与背景完全分割的图像,此即dilate图。

绘图代码

接下来,对完全二值化的图像进行连通域分割,得到labels图像,其中每一枚硬币所在区域,都被分配到了一个编号,即Label,最后的三维图,便是这张图像的标签值。

处理和绘图代码如下

import matplotlib.pyplot as plt
import cv2
path = 'coins.png'
imgs = {}imgs["original"] = plt.imread(path)imgs["gray"] = cv2.cvtColor(imgs["original"],cv2.COLOR_RGB2GRAY)
th, imgs["binary"] = cv2.threshold(imgs["gray"],0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)kernel = np.ones((5,5),np.uint8)
imgs["dilate"] = cv2.dilate(imgs["binary"], kernel)ret, imgs["labels"] = cv2.connectedComponents(imgs["dilate"])for i,key in enumerate(imgs,1):plt.subplot(2,3,i)plt.imshow(imgs[key])plt.title(key)plt.axis('off')ax = plt.subplot(236, projection='3d')
ys, xs = np.indices(imgs['labels'].shape)
ax.plot_surface(xs, ys, imgs['labels'])
plt.title("labels")
plt.show()

函数说明

【connectedComponents】是opencv提供的连通域分割函数,其必不可少的输入参数是一个二值图像,此外还有两个整型参数,分别用于规定邻域形式和输出的Labels类型。其中,邻域形式主要分为4-邻域和8邻域,前者把当前像素的上下左右四个像素算作邻域,换言之,这四个像素与当前像素是连通的;8-邻域则将一个像素周围的8个像素视作邻域。

【dilate】是形态学膨胀函数。所谓膨胀,和腐蚀一样,是一种形态学操作。二值图像中只有0和1两种元素,故而可将其表示为元素值为 1 1 1的元素位置集合 A = { ( i , j ) ∣ A i j = 1 } A=\{(i,j)\vert A_{ij}=1\} A={(i,j)Aij=1},则腐蚀和膨胀可表示为

A ⊖ B = { ( i , j ) ∣ B i j ⊆ A } A ⊕ B = { ( i , j ) ∣ B i j ∪ A ≠ ∅ } \begin{aligned} A\ominus B&=\{(i,j)|B_{ij}\subseteq A\}\\ A\oplus B&=\{(i,j)|B_{ij}\cup A\not=\varnothing\} \end{aligned} ABAB={(i,j)BijA}={(i,j)BijA=}

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

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

相关文章

今天就简单的说一下前端的游戏逻辑 if else,之前的抖音接入小游戏先缓存,最近太忙,先写一些简单的

比如在 cocos creator 组件 label private label:cc.Label null 然后你有一个逻辑是.如果赋值(就是服务器下发的数据给你,你就显示)如果不下发你前端就判断为空,那么按照以前的逻辑你肯定会这样子写: //假设服务器下发的数据就是 let serverNum 666; //通常的写法是下面这…

【软考高项】四、信息化发展之数字中国

1、数字经济 定义:从本质上看,数字经济是一种新的技术经济范式,它建立在信息与通信技术的重大突破的基础上,以数字技术与实体经济融合驱动的产业梯次转型和经济创新发展的主引擎,在基础设施、生产要素、产业结构和治理…

selenium自动化测试读取csv数据

1.定义读取数据: configFile py文件: class Config: #从read.csv文件中读取个人客户号 def GETKHH_GR(self):fileopen(D:\Pythonproject\read.csv,encodingUTF-8)khhReadercsv.reader(file)# print(list(khhReader))return .join(random.choice(list(…

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点: 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等. 框架…

安装VMWare

下载VMware软件(已提供给大家) 2.解压压缩文件 3.解压后文件夹中的内容 4.双击.exe进行VMware安装出现的第一个界面 5.点击下一步,出现以下界面 6.勾选我接受复选框,然后点击“下一步”。 7.后面几步都是点击“下一步”…

精品基于Uniapp+ssm英语学习交流平台小程序打卡计划备忘录

《[含文档PPT源码等]精品微信小程序基于Uniappssm英语学习交流平台小程序》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:ssm 安卓框…

深度学习:推动可持续发展与社会责任的创新引擎!

随着科技的飞速发展和全球化的推进,可持续发展和社会责任逐渐成为各个领域关注的焦点。深度学习作为人工智能的重要分支,在可持续发展和社会责任方面发挥着越来越重要的作用。本文旨在探讨深度学习在环境保护、资源利用、犯罪预防和残障人士辅助等领域的…

第 5 章 ROS常用组件-rosbag(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 5.2.1 rosbag使用_命令行 需求: ROS 内置的乌龟案例并操作,操作过程中使用 rosbag 录制&#xf…

从零开始学习深度学习库-2:反向传播

欢迎来到本系列的第二篇文章,我们将从头开始构建一个深度学习库。 本博客系列的代码可以在这个Github仓库中找到。 上一篇文章 在上一篇文章中(链接见这里),我们实现了线性层和常见的激活函数,并成功构建了神经网络的…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用:使用JS去操作HTML和浏览器 分类:DOM(文档对象模型)和BOM(浏览器对象模型) html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 (1)选择匹配的第…

LeetCode题练习与总结:在排序数组中查找元素的第一个和最后一个位置

一、题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 二、解…

第10集《天台教观纲宗》

请大家打开讲义第十七页。我们讲到己二、结申正义。 己二、结申正义 《法华经》把我们修行人修行的相貌,比喻作一个车乘。车乘就是一种交通工具,它能够让我们从此岸超越到彼岸去。所以修行它是可以超越的,你今天比昨天超越了,就好…

【C语言步行梯】C语言实现三子棋游戏(含详细分析)

🎯每日努力一点点,技术进步看得见 🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片代码片段网络相关题目的方式编写,欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

速盾:怎么看cdn有没有加速生效?

CDN(内容分发网络)是一种通过在全球范围内部署服务器节点来提供高速访问内容的技术,可以加速网站的加载速度并提高用户体验。当我们使用CDN服务后,如何判断CDN是否生效成为了一个重要的问题。 要判断CDN是否生效,我们…

基于微信小程序的车位共享平台的设计与实现【附项目源码】分享

基于微信小程序的车位共享平台的设计与实现: 源码地址:https://download.csdn.net/download/qq_41810183/88842865 基于微信小程序的车位共享平台设计与实现需求文档 一、引言 随着城市化进程的加快,停车难问题日益凸显。为解决这一难题,我…

abap opensql 官方文档 abap 整洁之道

abap 整洁之道 https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP_zh.md 支持 in 语法 in (’12‘,’34‘) SELECT mainquery_clauses[UNION ...]INTO|APPENDING target[UP TO ...] [OFFSET ...][abap_options].... [END…

C#验证哥德巴赫猜想

目录 1.哥德巴赫猜想 2.验证哥德巴赫猜想 1.哥德巴赫猜想 哥德巴赫猜想(Goldbach’s Conjecture)是数学领域的一个著名猜想,由德国数学家克里斯蒂安哥德巴赫(Christian Goldbach)在1742年提出。这个猜想的内容是&…

VB+ACCESS学籍管理系统-264-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword264 设计要求: 第一:一篇论文(5000到10000字)不包括图表和程序代码。A4纸20页之内。 论文结构如下: 设计题目:学籍管理系统 附:程…

KB5034441 0x80070643 reagentc.exe 无法更新引导配置数据

微软2024年1月的更新补丁正常更新会出现0x80070643错误,原因是正常安装系统默认的恢复分区留小了,通过压缩系统盘空间然后在diskgenius扩容恢复分区空间可以解决这个问题,但是笔者在进行上述操作时依旧出现了报错,按照网上的说法可…

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉操作系统内存异常实例讲解

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉内存溢出实例讲解 一、事故描述 生产环境Java进程莫名挡掉,JVM宕机。监控平台报警。生产停了,老板急了,客户爆了,怎么迅速解决事故?每次出现生产事故,都是…