【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,一经查实,立即删除!

相关文章

一文看懂E2PROM、FLASH等芯片,软件开发

对于EEPROM和Flash存储器这类非易失性存储芯片的软件开发,需要特别关注以下几点: 存储容量:了解芯片提供的存储空间大小,以及如何访问所有的存储单元。 页面大小和擦除块大小:对于Flash存储器,了解最小写入…

项目四:TensorRT编程

TensorRT编程 - 单层感知机结构 build.cpp /* 一般先是运行 build.cpp, 在运行 runtime.cu TensorRT命名空间是 nvinfer1; 1.创建builder 2.创建网络定义: builder --> network 3.配置参数: builder --> config 4.生成engine: builder --> engine(network, config) …

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,以展示如何重叠多个内核调用队…

防火墙规则来阻止攻击者的 IP 地址

1. iptables 要禁止服务器与特定 IP 地址的通信,可以使用防火墙来设置规则。在 Ubuntu 上,iptables 是一个常用的防火墙工具。以下是使用 iptables 设置禁止与特定 IP 通信的步骤: 阻止所有进出的通信 如果你想阻止服务器与特定 IP 地址的…

AES加解密工具类

文章目录 前言一、AES加解密工具类总结 前言 当涉及到数据的安全性和保密性时,加密是一种关键的技术手段。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,被认为是目前最安全和最常用的加密算法之一。 一、AES…

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

原生dom操作快速写入html渲染(insertAdjacentHTML)

// 旧方法 const btn document.createElement(div) btn.id material-btn-id btn.className material-btn btn.textContent 素材库 document.body.appendChild(btn) btn.addEventListener(click, () > {// 点击事件 }) // 新方法 const btn document.createElement(div…

软件开发小程序正规公司流程是什么样的?

正规软件开发的流程可以清晰地分为以下几个阶段,每个阶段都有其特定的目标和产出: 项目开发目的分析与确定: 此阶段主要是在软件开发商将开发项目确定下来之后,与需求方进行讨论,明确软件开发的目标及其具体需要实现…

NumPy 切片和索引

NumPy 切片和索引 NumPy 是 Python 中用于科学计算的核心库之一,它提供了一个强大的 N 维数组对象和许多用于操作这些数组的函数。在数据处理和数值计算中,切片和索引是常用的操作,它们允许我们有效地访问和修改数组的部分数据。本文将详细介…

调试的时候给打印加颜色

在 C 中,打印紫色文本通常涉及使用控制台的特定颜色输出。在大多数操作系统中,控制台颜色是通过特殊的转义序列来实现的。这些转义序列可以在输出文本之前插入,以改变文本的颜色、样式或其他属性。 使用 ANSI 转义序列 在 POSIX 兼容的系统&…

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

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

QML Controls模块-标准对话框用法说明

文章目录 颜色对话框文件对话框字体对话框自定义对话框通知对话框在QML中,Qt提供了一个名为 QtQuick.Controls的模块,其中包含了一系列用户界面控件,可以用于创建现代化、响应式的用户界面。在QtQuick.Controls模块中,一些控件可以用来调用标准对话框,包括文件对话框、字体…

Java进阶示例

使用DataFrame和SQL查询处理数据 在Spark中,DataFrame是一种以结构化方式处理数据的强大工具,它允许用户以类似于SQL的方式操作数据,提供了比RDD更高的抽象层次和更好的性能。下面的示例将展示如何使用Spark SQL的DataFrame API来读取CSV数据…