文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-02 00:47

关注

今天小编给大家分享一下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)

参数介绍如下: 

返回值:

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如何实现连通域处理函数”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯