【python】OpenCV—Segmentation

在这里插入图片描述

文章目录

  • cv2.kmeans
  • 牛刀小试

cv2.kmeans

cv2.kmeans 是 OpenCV 库中用于执行 K-Means 聚类算法的函数。以下是根据参考文章整理的 cv2.kmeans 函数的中文文档:

一、函数功能

cv2.kmeans 用于执行 K-Means 聚类算法,将一组数据点划分到 K 个簇中,使得簇内的数据点尽可能相似,而簇间的数据点尽可能不同。

二、函数格式

retval, labels, centers = cv2.kmeans(data, K, None, criteria, attempts, flags, centers=None)

三、参数说明

  • data:需要被聚类的原始数据集合,数据类型应为 np.float32。数据应是一维或多维的,每个样本应使用一行表示。例如,Mat points(count, 2, CV_32F) 表示二维浮点数据集。

  • K:聚类簇数,即希望将数据分成的簇的数量。

  • None:在原始 API 中,此位置是用于传递之前迭代的标签的,但在大多数情况下,可以设置为 None,因为算法会自动处理。

  • criteria:算法的终止条件。通常是一个包含三个元素的元组 (type, max_iter, epsilon):

    • type:终止条件类型,可以是 cv2.TERM_CRITERIA_EPS(仅当 epsilon 满足时停止)、cv2.TERM_CRITERIA_MAX_ITER(当迭代次数超过阈值时停止)或两者之和。

    • max_iter:最大迭代次数。

    • epsilon:精确度阈值。

  • attempts:使用不同的初始中心(或种子)来执行算法的次数。算法会返回最好的结果。

  • flags:用于设置如何选择起始重心。可以是 cv2.KMEANS_PP_CENTERS(使用 K-Means++ 初始化)或 cv2.KMEANS_RANDOM_CENTERS(随机初始化)。
    centers(可选):输出的聚类中心。如果未提供,则算法会返回一个。

四、返回值

  • retval:紧密度(compactness),即每个点到其相应簇中心的距离的平方和。
  • labels:每个数据点的最终分类标签数组。
  • centers:由聚类中心组成的数组。

五、注意事项

  • 在调用 cv2.kmeans 之前,通常需要将数据转换为 np.float32 类型,并确保数据的形状是 (样本数, 特征数)。

  • 聚类结果可能受初始中心选择的影响,因此设置 attempts 参数为较高的值可能会得到更稳定的结果。

  • 根据问题的具体需求和数据特性,可能需要调整 K、max_iter 和 epsilon 等参数以获得最佳聚类效果。

牛刀小试

import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cmnum_classes = 6img = cv2.imread('2.jpg', 0)  # image read be 'gray'# change img(2D) to 1D
img1 = img.reshape((img.shape[0]*img.shape[1], 1))
img1 = np.float32(img1)# define criteria = (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)# set flags: hou to choose the initial center
# ---cv2.KMEANS_PP_CENTERS ;
# cv2.KMEANS_RANDOM_CENTERS
flags = cv2.KMEANS_RANDOM_CENTERS# apply kmenas
compactness, labels, centers = cv2.kmeans(img1, num_classes, None, criteria, 10, flags)
print(len(centers))mask = labels.reshape((img.shape[0],img.shape[1]))cmap = cm.get_cmap('Set1', num_classes)  # 使用'viridis' colormap,但你可以使用其他colormap# 绘制mask图像
fig, ax = plt.subplots(figsize=(8, 8))
ax.imshow(mask, cmap=cmap, interpolation='nearest', alpha=0.8)
plt.title('mask')
plt.xticks([])
plt.yticks([])# 你可以添加颜色条(colorbar)来显示每个颜色对应的类别
cbar = fig.colorbar(ax.images[-1], ax=ax, ticks=np.arange(num_classes))
cbar.ax.set_yticklabels(['background'] + [f'class {i}' for i in range(1, num_classes)])# 显示图像
plt.show()

输入的原图

在这里插入图片描述
显示的灰度图
在这里插入图片描述
聚成2类
在这里插入图片描述

聚成3类

在这里插入图片描述

聚成4类

在这里插入图片描述

聚成5类

在这里插入图片描述

聚成6类

在这里插入图片描述

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

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

相关文章

Altair 助力优化摩托车空气动力学性能,实现最佳的整流罩设计

案例简介 整流罩是绝大多数摩托车的重要组成部分,旨在提高车辆的空气动力学性能和稳定性。Altair 与 KTM 公司员工组成的项目团队,针对摩托车整流罩空气动力学方面的学生项目,展开了密切合作。 项目任务主要是对摩托车整流罩设计进行比较&…

山体滑坡监测利器:传感器与智能监测平台的应用

山体滑坡,这一地质灾害的代名词,指的是山坡上的土体或岩体在重力作用下,因自然或人为因素而向下滑动的现象。滑坡具有突发性、隐蔽性、危害性和破坏性等特征,因此,对于山体滑坡的监测工作显得尤为重要。本文将探讨山体…

豆包高质量声音有望复现-Seed-TTS

我们介绍了 Seed-TTS,这是一个大规模自回归文本转语音 (TTS) 模型系列,能够生成与人类语音几乎没有区别的语音。Seed-TTS 作为语音生成的基础模型,在语音上下文学习方面表现出色,在说话人的相似性和自然性方…

Vitis HLS 学习笔记--Stream Chain Matrix Multiplication

目录 1. 简介 2. 示例解析 2.1 示例功能说明 2.2 函数说明 2.2.1 mmult 函数 2.2.2 mm2s 函数 2.2.3 s2mm 函数 2.2.4 总示意图 3. 总结 1. 简介 这是一个包含使用数据流的级联矩阵乘法的内核。该内核启用了 ap_ctrl_chain,以展示如何重叠多个内核调用队…

2024年最好用的精简系统推荐!旧电脑福音!

精简版电脑系统经过精心优化,去除了冗余功能,保留了核心功能,让用户的操作更加便捷高效,同时也具备强大的兼容性和稳定性,整体操作体验感很好。但是,许多新手用户不知道在哪里才可以找到好用的精简版系统&a…

Mojo崛起:AI-first 的编程语言能否成为新流行?

眨眼之间,你可能会错过又一种编程语言的发明。 有个笑话说,程序员花费20%的时间编写代码,80%的时间决定使用什么语言。 事实上,编程语言如此之多,以至于我们不确定实际有多少种。据估计,至少有700种编程语…

【Android 11】AOSP Settings添加屏幕旋转按钮

前言 这里是客户要求添加按钮以实现屏幕旋转。屏幕旋转使用adb的命令很容易实现: #屏幕翻转 adb shell settings put system user_rotation 1 #屏幕正常模式 adb shell settings put system user_rotation 0这里的值可以是0,1,2&#xff0c…

中国天辰×蓝卓丨共创行业级工业操作系统,加速培育新质生产力!

6月17日,中国天辰工程有限公司(以下简称“中国天辰”)党委委员、总经理梁军湘一行莅临蓝卓,双方就工业互联网平台合作进行座谈交流。蓝卓总经理谭彰、副总经理蓝照斌、总经理助理俞益标,以及中控技术副总裁吴才宝、大客…

Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化

主要看点 行业: 家电行业 挑战: 企业面临的挑战是如何利用已收集的大量数据,深入了解消费者在产品使用过程中对某些保鲜程序的影响。 Altair 解决方案: Altair采用了Altair RapidMiner人工智能平台来解决问题,特别是…

docker安装消息队列mq中的rabbit服务

在现代化的分布式系统中,消息队列(Message Queue, MQ)已经成为了一种不可或缺的组件。RabbitMQ作为一款高性能、开源的消息队列软件,因其高可用性、可扩展性和易用性而广受欢迎。本文将详细介绍如何在Docker环境中安装RabbitMQ服务…

八股系列 Flink

Flink 和 SparkStreaming的区别 设计理念方面 SparkStreaming:使用微批次来模拟流计算,数据已时间为单位分为一个个批次,通过RDD进行分布式计算 Flink:基于事件驱动,是面向流的处理框架,是真正的流式计算…

访问学者谈CSC青年骨干教师项目出国经历及感受

CSC青年骨干教师出国研修项目实施已近20年,越来越多的青年教师成为该项目的受益者。知识人网小编推荐该项目资助老师谈谈在加拿大卡尔加里大学访学一年的经历及感受。 国家留学基金委(以下简称CSC)高等学校青年骨干教师出国研修项目&#xff…

个股期权有哪些股票?金融新手必须知道!

今天带你了解个股期权有哪些股票?在中国的股票市场中,个股期权是一种衍生品,允许投资者购买或卖出特定股票的期权合约。 个股期权有哪些股票? 个股期权是指在特定时间内,以特定价格买入或卖出特定数量的某只个股的权利…

lombok.jar包,解决 java: 找不到符号 符号: 类 __

打开设置在这里添加这样一小句话. -Djps.track.ap.dependenciesfalse

赛氪网荣膺“创新型中小企业”称号,科技创新再显卓越实力

近日,北京市经济和信息化局揭晓了2024年度3月份北京市创新型中小企业的光荣名单,其中北京环球赛乐科技有限公司(简称赛氪网)脱颖而出,再度展现其在创新领域的卓越实力! 作为早已跻身“高企之光”行列的佼佼…

COUNTIF函数除计数,还可排序哦

COUNTIF函数除统计个数外,还可以排序哦! 近期工作中遇到一个场景“对不同类型的人员按办理量进行排序”,前期只是对同一种类型进行排序,经过查阅资料,可以用COUNTIF函数解决问题,今天就把COUNTIF函数的用法…

EarMaster pro 7 For Mac软件下载-EarMaster Pro(音乐赏析进阶专业版)V6.1下载附加详细安装步骤

EarMaster pro 7 For Mac最新版是一款相当专业的听力训练和音乐理论练习软件,这个EarMaster pro 7 For Mac版带来了全的操作界面,并且更新了课程信息,内置了2000多种课程供用户选择,可以用于听耳训练、视唱和节奏训练等操作。 安 …

视频太大了怎么缩小内存

我们在分享视频的时候,有时候会遇到过视频文件太大,无法发送或者上传的情况,别担心,今天我就来给大家分享一个简单有效的方法,让你的视频变得更小,更方便分享! 打开 “51视频处理官网 的网站。上…

学校分体空调集控系统

学校分体空调集控系统是一种先进的温度控制解决方案,它主要针对学校等公共场所的空调管理需求而设计。该系统通过集中控制和管理多台分体空调设备,实现了更高的能效、更便捷的操作和更舒适的室内环境。 需求与挑战:学校教学楼、办公楼、实验楼…

智能血糖仪的条码二维码读取设备选型经验分享

智能科技的快速发展,推动医疗辅助设备朝着更加智能、操作更便捷的方向发展,便携式血糖仪已经成为糖尿病患者日常监测血糖的重要工具,但传统血糖仪的检测结果需要用户自己判断,缺乏数据分析很容易出错,而便携式智能血糖…