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.hqwc.cn/news/537256.html

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

相关文章

HCIP —— BGP 路径属性 (上)

目录 BGP 路径属性 1.优选Preferred-Value属性值最大的路由 2.优选Local-preference 属性数值大的路由 3.本地始发的BGP路由优先于其他对等体处学习到的路由。 4..优选AS_PATH属性值最短的路由 BGP 路径属性 BGP的路由选路是存在优选规则的,下图为华为官网提供…

腾讯云服务器“地域”这么选就对了!

腾讯云服务器地域怎么选择?不同地域之间有什么区别?腾讯云哪个地域好?地域选择遵循就近原则,访客距离地域越近网络延迟越低,速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素,地域节点选择…

【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值

【django framework】ModelSerializerGenericAPIView,如何在提交前修改某些字段值 我们经常会遇到下面这种情况: 序列化器用的是ModelSerializer,写视图的时候继承的是generics.CreateAPIView。现在我想在正式提交到数据库(perform_create)之…

Python算法(列表排序)

一。冒泡排序: 列表每两个相邻的数,如果前面比后面大,则交换这两个数 一趟排序完成后,则无序区减少一个数,有序区增加一个数 时间复杂度:O(n*n) 优化后:已经排序好后立马停止,加快…

浅谈HTTP 和 HTTPS (中间人问题)

前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了加密 一.两种加密方式 1.对称加密 公钥 明文 密文 密文 公钥 明文 2.非对称加密 举个例子就好比 小区邮箱 提供一…

PDF24 Creator PDF工具箱 v11.17.0

软件介绍 可将大部分文件转成pdf格式的免费软件,安装好后会在你的打印机里看到一个叫PDF24的虚拟打印机,你可将要转成pdf格式的文件打印时选虚拟打印机PDF24,也可以直接将文件以拖拉方式拉进这软件的主视窗编辑区里,它会自动转成…

react 综合题-旧版

一、组件基础 1. React 事件机制 javascript 复制代码<div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&a…

如何恢复丢失未保存的 Word 文档指南

在广阔的数字领域&#xff0c;对丢失未保存的 Word 文档的恐惧对于用户来说是再熟悉不过的焦虑了。本指南旨在对用户可能发现自己迫切需要恢复未保存文档的各种场景进行详尽的探索。无论是由于保存失败、意外的系统崩溃还是令人心碎的意外删除&#xff0c;请放心&#xff0c;我…

Redis 八种常用数据类型详解

夯实基础&#xff0c;这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zse…

前端大屏适配几种方案

1920*1080的设计稿。 方案一&#xff1a;vw&#xff08;单位&#xff09; 假设设计稿尺寸为 1920*1080&#xff08;做之前一定问清楚 ui 设计稿的尺寸&#xff09; 即&#xff1a; 网页宽度1920px 网页高度1080px 我们都知道 网页宽度100vw 网页宽度100vh 所以&#xff0c;在 1…

腾讯云轻量应用服务器使用全攻略,都在这!

腾讯云轻量应用服务器怎么使用&#xff1f;轻量应用服务器使用包括快速创建轻量服务器、轻量服务器远程连接、使用轻量应用服务器搭建网站教程、轻量服务器开通端口教程等&#xff0c;腾讯云服务器网txyfwq.com整理了关于腾讯云轻量应用服务器的使用教程&#xff0c;目前轻量应…

第六篇【传奇开心果系列】Python的自动化办公库技术点案例示例:大学生数据全方位分析挖掘经典案例

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas库全方位分析挖掘大学生数据能力介绍二、大学生学生成绩数据分析数据挖掘示例代码三、大学生选课数据分析数据挖掘示例代码四、大学生活动参与数据分析数据挖掘示例代码五、大学…