返回顶部
首页 > 资讯 > 后端开发 > Python >python如何实现连通域处理函数
  • 905
分享到

python如何实现连通域处理函数

2023-07-02 00:07:50 905人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python如何实现连通域处理函数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、两个函数介绍总得来

今天小编给大家分享一下python如何实现连通域处理函数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    1、两个函数介绍

    总得来说,connectedComponents()仅仅创建了一个标记图(图中不同连通域使用不同的标记,和原图宽高一致),connectedComponentsWithStats()可以完成上面任务,除此之外,还可以返回每个连通区域的重要信息–bounding box, area, andcentroid。

    1.1什么是连通域

    连通区域一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域。连通区域分析是指将图像中的各个连通区域找出并标记。

    连通区域分析是一种在CVPR和图像分析处理的众多应用领域中较为常用和基本的方法。

    例如:OCR识别中字符分割提取(车牌识别、文本识别、字幕识别等)、视觉跟踪中的运动前景目标分割与提取(行人入侵检测、遗留物体检测、基于视觉的车辆检测与跟踪等)、医学图像处理(感兴趣目标区域提取)、等等。也就是说,在需要将前景目标提取出来以便后续进行处理的应用场景中都能够用到连通区域分析方法,通常连通区域分析处理的对象是一张二值化后的图像。

    1.2 cv2.connectedComponents()

    函数各参数意义:

    num_objects, labels = cv2.connectedComponents(image)

    参数介绍如下: 

    image:也就是输入图像,必须是二值图,即8位单通道图像。(因此输入图像必须先进行二值化处理才能被这个函数接受)

    返回值: 

    num_labels:所有连通域的数目

    labels:图像上每一像素的标记,用数字1、2、3…表示(不同的数字表示不同的连通域)

    1.3 cv2.connectedComponentsWithStats()

    这个函数的作用是对一幅图像进行连通域提取,并返回找到的连通域的信息:retval、labels、stats、centroids

    num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=8, ltype=None)

    参数介绍如下: 

    • image:也就是输入图像,必须是二值图,即8位单通道图像。(因此输入图像必须先进行二值化处理才能被这个函数接受) 

    • connectivity:可选值为4或8,也就是使用4连通还是8连通。 

    • ltype:输出图像标记的类型,目前支持CV_32S 和 CV_16U。

    返回值:

    • num_labels:所有连通域的数目 

    • labels:图像上每一像素的标记,用数字1、2、3…表示(不同的数字表示不同的连通域) 

    • stats:每一个标记的统计信息,是一个5列的矩阵,每一行对应每个连通区域的外接矩形的x、y、width、height和面积,示例如下: 0 0 720 720 291805 

    • centroids:连通域的中心点

    2、代码实践

    两个代码的用处是共通的,cv2.connectedComponentsWithStats函数返回的信息量更大,所以这里展示它的应用。

    import cv2import numpy as np# 读入图片img = cv2.imread("001.jpg")# 中值滤波,去噪img = cv2.medianBlur(img, 3)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.namedWindow('original', cv2.WINDOW_AUTOSIZE)cv2.imshow('original', gray)# 阈值分割得到二值化图片ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 膨胀操作kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))bin_clo = cv2.dilate(binary, kernel2, iterations=2)# 连通域分析num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(bin_clo, connectivity=8)# 查看各个返回值# 连通域数量print('num_labels = ',num_labels)# 连通域的信息:对应各个轮廓的x、y、width、height和面积print('stats = ',stats)# 连通域的中心点print('centroids = ',centroids)# 每一个像素的标签1、2、3.。。,同一个连通域的标签是一致的print('labels = ',labels)# 不同的连通域赋予不同的颜色output = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)for i in range(1, num_labels):    mask = labels == i    output[:, :, 0][mask] = np.random.randint(0, 255)    output[:, :, 1][mask] = np.random.randint(0, 255)    output[:, :, 2][mask] = np.random.randint(0, 255)cv2.imshow('oginal', output)cv2.waiTKEy()cv2.destroyAllwindows()

    打印出的连通域的信息如下: 

    重点是理解stats和 labels 参数的意义,其他的参数都容易理解: 

    labels :对原始图中的每一个像素都打上标签,背景为0,连通域打上1,2,3。。。的标签,同一个连通域的像素打上同样的标签。相当与对每一个像素进行了分类(分割) 

    stats:每一连通域的信息,表示每个连通区域的外接矩形(起始点的x、y、宽和高)和面积

    python如何实现连通域处理函数

    python如何实现连通域处理函数

    连通域检测的效果图:

    python如何实现连通域处理函数

    以上就是“Python如何实现连通域处理函数”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

    --结束END--

    本文标题: python如何实现连通域处理函数

    本文链接: https://lsjlt.com/news/338629.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • python如何实现连通域处理函数
      今天小编给大家分享一下python如何实现连通域处理函数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、两个函数介绍总得来...
      99+
      2023-07-02
    • OpenCV学习记录python实现连通域处理函数
      目录1、两个函数介绍1.1什么是连通域1.2 cv2.connectedComponents()1.3 cv2.connectedComponentsWithStats()2、代码实...
      99+
      2024-04-02
    • Python实现标记数组的连通域
      目录连通域标记structure参数操作连通域定位连通域连通域标记 通过label函数,可以对数组中的连通区域进行标注,效果如下 from scipy.ndimage import ...
      99+
      2023-05-16
      Python标记数组连通域 Python 数组连通域 Python 连通域
    • 如何使用 Python 函数实现高效的并发处理?
      Python 是一种高级语言,使用它编写的程序可以在许多领域得到应用。Python 函数的强大之处在于,它可以让我们以一种高效的方式实现并发处理。在本文中,我们将介绍如何使用 Python 函数实现高效的并发处理。 并发处理是一种实现多任务...
      99+
      2023-08-29
      函数 实时 并发
    • 如何用BAT批处理实现Fibonacci函数
      本篇内容主要讲解“如何用BAT批处理实现Fibonacci函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用BAT批处理实现Fibonacci函数”吧!@ECHO OFF&nbs...
      99+
      2023-06-08
    • 如何实现Python中常用图片处理函数的使用
      这篇文章跟大家分析一下“如何实现Python中常用图片处理函数的使用”。内容详细易懂,对“如何实现Python中常用图片处理函数的使用”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习...
      99+
      2023-06-26
    • python如何实现Cookies处理
      这篇文章主要介绍python如何实现Cookies处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Cookies处理import urllib2, cookielibcookie_support...
      99+
      2023-06-08
    • 如何使用Python实现实时数据处理?
      随着数据的不断增长,实时数据处理已经成为了数据科学家们必须要掌握的技能之一。Python作为一种强大的编程语言,在实时数据处理方面也有着独特的优势。本文将介绍如何使用Python实现实时数据处理,并附带演示代码。 实时数据处理 实时数据处理...
      99+
      2023-10-07
      同步 实时 numy
    • Python实现统计图像连通域的示例详解
      目录数组统计函数连通域标记连通域统计数组统计函数 ndimage提供一系列函数,可以计算标注后的数组的相关特征,比如最值、均值、均方根等。 下列函数,如果未作其他说明,那么就有3个参...
      99+
      2023-05-17
      Python统计图像连通域 Python 图像连通域 Python 连通域
    • Nginx如何实现动态子域名处理
      Nginx可以实现动态子域名处理通过使用通配符和变量来匹配和处理动态子域名。以下是一个示例配置: server { list...
      99+
      2024-04-29
      Nginx
    • python如何通过函数取差
      小编给大家分享一下python如何通过函数取差,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!通过函数取差如下方法首先会应用一个给定的函数,然后再返回应用函数后结果...
      99+
      2023-06-27
    • python如何实现异常处理
      小编给大家分享一下python如何实现异常处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!异常处理for i in compani...
      99+
      2023-06-27
    • 如何通过 PHP 函数和 NumPy/Numpy 加速数据处理?
      随着数据科学和机器学习技术的发展,数据处理的速度和效率成为了一个重要的问题。而 PHP 函数和 NumPy/Numpy 是两个优秀的工具,可以帮助我们加速数据处理的过程。本文将介绍如何通过这两个工具来加速数据处理。 一、PHP 函数的使用 ...
      99+
      2023-09-17
      函数 numpy numy
    • PHP大数据处理:如何使用函数实现实时计算?
      PHP是一种广泛使用的服务器端脚本语言,它可以用于处理大量的数据。PHP提供了许多内置函数,可以帮助我们对大量数据进行实时计算。在这篇文章中,我们将介绍如何使用PHP函数来进行大数据处理和实时计算。 一、PHP数组 在PHP中,数组是一种存...
      99+
      2023-10-22
      大数据 函数 实时
    • OpenCV-Python实现通用形态学函数
      目录通用形态学函数开运算闭运算形态学梯度运算顶帽运算黑帽运算结构元函数通用形态学函数 上篇博文,我们介绍了形态学的基础腐蚀与膨胀操作,而将腐蚀与膨胀结合起来进行组合,我们就能实现开运...
      99+
      2024-04-02
    • 如何使用 PHP 函数实现图像处理功能?
      php 提供了一系列内置函数用于图像处理,可轻松调整、转换和操纵图像:载入图像:使用 imagecreatefrom*() 函数从文件扩展名载入图像。调整图像大小:imagecopyre...
      99+
      2024-04-22
      图像处理 php
    • golang函数中的错误处理是如何实现的?
      go 语言中函数错误处理通过返回一个 error 接口类型的错误来实现。1. 内建的 error 接口类型的 error() 方法返回错误的描述字符串。2. 通过 if err != n...
      99+
      2024-05-23
      golang 错误处理
    • python详解如何通过sshtunnel pymssql实现远程连接数据库
      最近几天在做Python相关项目,有个需求 ,是希望在任何机器上都可以ssh到某台在数据库白名单的机器上,然后访问数据库,不然的话就要去服务器安装Python环境,运行程序,比较麻烦...
      99+
      2024-04-02
    • 详解如何通过JavaScript实现函数重载
      有的同学在开发中可能遇到过一个困扰,但是很少有人去解决这个问题,我这用一个例子展现出来 const searcher = {}; searcher.findAll = () =>...
      99+
      2023-01-12
      JavaScript实现函数重载 JavaScript函数重载 JavaScript 重载
    • golang函数中的通道是如何实现的?
      go 语言中,通道的内部结构包含元素类型、缓冲区指针、互斥锁、发送和接收队列。收发机制涉及唤醒 goroutine 来发送或接收数据。通道分为缓冲和无缓冲两种。缓冲通道允许gorouti...
      99+
      2024-05-23
      golang 通道 并发访问
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作