python-opencv图像分割

文章目录

    • 二值化
    • 图像骨骼
    • 连通域分割

二值化

所谓图像分割,就是将图像的目标和背景分离开来,更直观一点,就是把目标涂成白色,背景涂成黑色,言尽于此,是不是恍然大悟:这不就是二值化么?

【threshold]是此前提到的二值化函数,但只讲解了固定阈值分割模式,而并未讲解其自动分割的OTSU模式。

【adaptiveThreshold】是opencv提供的自适应阈值函数,可根据不同的卷积核来对局部进行二值化,可以更加细致地得到物体边缘。

OTSU算法,mean核,高斯核的分割结果如下图所示,其中150是手动设置的分割阈值;100是OTSU自动计算出的分割阈值。

提示说图像违规,也不知道哪违规了。

代码如下

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import ascent
import cv2path = 'coins.jpg'coins = {}
coins["original"] = plt.imread(path)
coins["gray"] = cv2.cvtColor(coins["original"],cv2.COLOR_RGB2GRAY)_, coins['th150'] = cv2.threshold(coins["gray"], 150, 255, cv2.THRESH_BINARY)
th, bImg = cv2.threshold(coins["gray"], 0, 255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
coins[f'otsu({th})'] = bImgmethod = {"mean":cv2.ADAPTIVE_THRESH_MEAN_C,"gaussian":cv2.ADAPTIVE_THRESH_GAUSSIAN_C}
for key in method:coins[key] = cv2.adaptiveThreshold(coins["gray"], 255,method[key], cv2.THRESH_BINARY, 11, 2)for i,key in enumerate(coins,1):plt.subplot(2,3,i)plt.imshow(coins[key], cmap='gray')plt.title(key)plt.axis('off')plt.show()

图像骨骼

如果把二值图像理解成地形,黑色表示海洋,白色表示陆地,那么陆地上任意一点,到海洋都有一个最近的距离,如下图所示。由于硬币图案的颜色并不完全一致,所以在二值化时可能会出现不一致的情况,为此,需要通过腐蚀或者膨胀等形态学处理,将其内部涂抹均匀,从而得到一张目标与背景完全分割的图像,此即【dilate】图。对dilate图而言,【dist-bg】为其黑色区域的骨骼;【dist-fg】为白色区域的骨骼。

在这里插入图片描述

实现代码如下

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import ascent
import cv2bImg = coins[f'otsu({th})']kernel = np.ones((5,5),np.uint8)
coins["dilate"] = cv2.dilate(coins[f'otsu({th})'], kernel)
coins["dist-fg"] = cv2.distanceTransform(coins["dilate"], cv2.DIST_L2,5)
coins["dist-bg"] = cv2.distanceTransform(255-coins["dilate"], cv2.DIST_L2,5)keys = ['dilate', 'dist-bg', 'dist-fg']
for i,key in enumerate(keys,1):plt.subplot(1,3,i)plt.imshow(coins[key], cmap='gray')plt.title(key)plt.axis('off')plt.show()

【distanceTransform】函数的功能是,计算当前像素点到零像素点的最短距离,其输入参数有三,分别是输入的二值图像;求解距离的类型,以及掩膜尺寸,一般可设为3或者5。

在一张图像中,两点之间的距离有多种计算方式,比如

  • a a a 水平和数竖直方向的变化量
  • b b b 对角方向的变化量
  • c c c 条约移动的变化量

距离变换函数综合了这三种距离,根据各种距离的权重不同,提供了下面几种不同的距离类别

distanceTypemaskSize参数
CV_DIST_C3 ( 3 × 3 ) (3\times3) (3×3) a = 1 , b = 1 a=1, b=1 a=1,b=1
CV_DIST_L13 ( 3 × 3 ) (3\times3) (3×3) a = 1 , b = 2 a=1, b=2 a=1,b=2
CV_DIST_L23 ( 3 × 3 ) (3\times3) (3×3) a = 0.955 , b = 1.3693 a=0.955, b=1.3693 a=0.955,b=1.3693
CV_DIST_L25 ( 5 × 5 ) (5\times5) (5×5) a = 1 , b = 1.4 , c = 2.1969 a=1, b=1.4, c=2.1969 a=1,b=1.4,c=2.1969

连通域分割

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

通过连通域分割,可以将图像中不同的目标区分开来,为进一步的处理打下基础,最常用的连通域滤波流程大致如下:图像灰度化->二值化->形态学处理->标记连通域,其前面的几个步骤已经在二值化以及距离变换中得以体现,其生成标签的结果如下图所示

在这里插入图片描述

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

处理和绘图代码如下

ret, coins["labels"] = cv2.connectedComponents(coins["dilate"])for i,key in enumerate(['dilate', 'labels'],1):plt.subplot(1,3,i)plt.imshow(coins[key], cmap='gray')plt.title(key)plt.axis('off')ax = plt.subplot(133, projection='3d')
ys, xs = np.indices(coins['labels'].shape)
ax.plot_surface(xs, ys, coins['labels'])
plt.title("labels")
plt.show()

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

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

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

相关文章

香橙派 AIpro 的系统评测

0. 前言 你好,我是悦创。 今天受邀测评 Orange Pi AIpro开发板,我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从:Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…

DevExpress Installed

一、What’s Installed 统一安装程序将DevExpress控件和库注册到Visual Studio中,并安装DevExpress实用工具、演示应用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜单 Demo Applications 演示应用程序 Launch the Demo…

PS去水印

去除图片水印 step1:使用套索工具框选图片水印 step2:CTRLshiftU 去色 step3:CTRLL 色阶 step4:使用第三根吸管去点击需要去掉的图片水印 成功去掉 去掉文字水印 也可按照上述方法去除

计算机网络 期末复习(谢希仁版本)第1章

大众熟知的三大网络:电信网络、有线电视网络、计算机网络。发展最快起到核心的是计算机网络。Internet是全球最大、最重要的计算机网络。互联网:流行最广、事实上的标准译名。互连网:把许多网络通过一些路由器连接在一起。与网络相连的计算机…

【多模态】35、TinyLLaVA | 3.1B 的 LMM 模型就可以实现 7B LMM 模型的效果

文章目录 一、背景二、方法2.1 模型结构2.2 训练 pipeline 三、模型设置3.1 模型结构3.2 训练数据3.3 训练策略3.4 评测 benchmark 四、效果 论文:TinyLLaVA: A Framework of Small-scale Large Multimodal Models 代码:https://github.com/TinyLLaVA/T…

【Unity性能优化】使用多边形碰撞器网格太多,性能消耗太大了怎么办

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

【机器学习基础】Python编程04:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

快团团有货源的供货大团长如何给单个订单发货?

快团团团长给单个订单发货的步骤如下: 登录快团团商家后台:首先,你需要以团长的身份登录快团团的商家后台管理系统。 进入订单管理页面:登录后,在后台导航中找到并点击“订单管理”或类似的选项,进入订单列…

算法人生(19): 从“LangChain的六大组件”看“个人职业规划”

我们今天要说说和大模型有着密切关系的Langchain ,它提供了一个平台,让开发者可以更加轻松地训练、部署和管理这些大模型。具体来说,Langchain 可以通过提供高性能的计算资源、灵活的模型管理和部署选项、以及丰富的监控和调试功能&#xff0…

企业软件产品和服务 之 设计保证安全 七项承诺

1. 引言 公司如何保护自己免受数据泄露的影响?标准答案就是: “启用多因素身份验证”——MTA(Enable multifactor authentication)。 但是,目前很多公司仍然盲目地只使用密码作为唯一的身份来源。 网络安全的核心是…

【分享】两种方法设置PDF“打开密码”

想要保护PDF文件的私密性,只允许特定人查看,我们可以给PDF设置“打开密码”,这样只有知道密码的人才可以打开文件。如果小伙伴们不知道如何设置,就一起看看以下两种方法吧! 方法1:使用PDF编辑器 大部分PD…

HarmonyOS(二十四)——Harmonyos通用事件之触摸事件

1.触摸事件。 触摸事件是HarmonyOS通用事件的一种事件之一,当手指在组件上按下、滑动、抬起时触发。 名称是否冒泡功能描述onTouch(event: (event?: TouchEvent) > void)是手指触摸动作触发该回调,event返回值见下面TouchEvent介绍。 2. TouchEve…

埃隆·马斯克 - 从梦想家到改变世界的企业家

埃隆马斯克 - 从梦想家到改变世界的企业家 本文内容是埃隆马斯克传的重点章节精华提炼,介绍了马斯克传奇一生 参考资料内容:埃隆马斯克传&造梦者埃隆马斯克 参考资料在文末获取,关注我,分享优质前沿资料(IT、运…

交互设计专业解析:发展前景和薪资待遇

交互式设计专业是一门旨在帮助人们更好地与数字产品和服务互动的设计学科。交互式设计专业涉及人机交互、用户体验设计、用户界面设计等多个不同领域。交互式设计是当今数字时代不可缺少的一部分。它能为用户提供更好的体验和更高效的功能,为企业创造更高的价值和影…

LabVIEW储油罐监控系统

LabVIEW储油罐监控系统 介绍了基于LabVIEW的储油罐监控系统的设计与实施。系统通过集成传感器技术和虚拟仪器技术,实现对储油罐内液位和温度的实时监控,提高了油罐监管的数字化和智能化水平,有效增强了油库安全管理的能力。 项目背景 随着…

买卖股票的各种最佳时机问题

买卖股票的最佳时机 分析 根据题意可知,我们只需要找出来一个最小价格的股票和一个最大价格的股票,并且最小价格的股票出现在最大价格的股票之前。 如果尝试使用暴力解法,时间复杂度为O(N^2),对于题目中给的长度,显然…

金士顿U盘被写保护的解决方法

1.适用的U盘芯片信息 USB设备ID: VID 0951 PID 1666 设备供应商: Kingston 设备名称: DataTraveler 3.0 设备修订版: 0110 产品制造商: Kingston 产品型号: DataTraveler 3.0 产品修订版: PMAP 主控厂商: Phison(群联) 主控型号: PS2251-07(PS2307) - F/W 08.03.50 [2018-…

从学士-硕士-博士-博士后-副教授-教授-优青-杰青-长江-院士:一文看懂学术巨人的成长历程

会议之眼 快讯 学术之路,如同攀登一座高耸入云的山峰,需要毅力、智慧和不断的求知探索。从奠定基础的学士,到站在学术巅峰的院士。这条成长之路充满了挑战和机遇。 如果把学术界比作王者荣耀,那么学者们的成长历程就像是在进行一…

SpringBoot-SchedulingConfigurer源码初识:理解定时任务抛异常终止本次调度,但不会影响下一次执行调度

SchedulingConfigurer源码初识:理解定时任务抛异常终止本次调度,但不会影响下一次执行调度 EnableSchedulingScheduledAnnotationBeanPostProcessor进入finishRegistration方法 ScheduledTaskRegistrar处理触发器任务(TriggerTask&#xff09…

F5G城市光网,助力“一网通城”筑基数字中国

《淮南子》中说,“临河而羡鱼,不如归家织网”。 这句话在后世比喻为做任何事情都需要提前做好准备,有了合适的工具,牢固的基础,各种难题也会迎刃而解。 如今,数字中国发展建设如火如荼,各项任务…