【python】OpenCV—Segmentation

news2024/11/26 4:52:38

在这里插入图片描述

文章目录

  • 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 cm

num_classes = 6

img = 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.coloradmin.cn/o/1835245.html

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

相关文章

DGit介绍

参考地址:http://githubengineering.com/introducing-dgit/ DGit是“Distributed Git”的简写,即分布式Git。 众所周知,Git本身就是分布式的,任何的Git仓库备份都是包含该项目所有历史版本的所有的文件,分支&#xff…

SOLIDWORKS 2024正版软件:新增功能介绍

随着科技的飞速发展,计算机辅助设计(CAD)软件在工业设计领域扮演着越来越重要的角色。SOLIDWORKS作为3D CAD软件提供商,其每一次版本更新都带来了一系列创新功能和改进,旨在为用户提供更有效、更智能、更协同的设计体验…

雨量监测预警系统:非接触式测量防汛预警

TH-SW2雨量监测预警系统是一种用于监测降雨量的重要工具,对于防汛预警工作具有重要意义。该系统采用非接触式测量技术,可以实时监测雨量数据,并自动预警,以便及时采取防汛措施,确保人民生命财产安全。 系统组成 1. 雨…

嵌入式实训day6

1、 from machine import Pin from neopixel import NeoPixel import timeif __name__"__main__"#创建RBG灯带控制对象,包含5个像素(5个RGB LED)rgb_led NeoPixel(Pin(4,Pin.OUT),5)#定义RGB颜色RED(255,0,0)GREEN(0,2…

Vue项目 [WDS] Disconnected解决方法

Vue项目出现这个错误:[WDS] Disconnected! 1.对项目运行本身造成什么实质性的影响 2.红色的提示摆在那里确实不太好看 解决 打开 Application->LocalStorage,在key上添加loglevel:webpack-dev-server,在Value上添加SILENT。

项目计划

1.什么是项目计划? 2.软件项目计划的作用 3.项目计划的内容 4.项目计划的主要内容 5.滚动计划方法 6.WBS方法 7.软件项目的特点 8.制定计划的要点 9.直接成本和间接成本 10.为什么说项目计划不是一个文档,而是一个持续的策划过程? 项目计划不…

C++升级软件时删除老版本软件的桌面快捷方式(附源码)

删除桌面快捷方式其实是删除桌面上的快捷方式文件,那我们如何去删除桌面快捷方式文件呢?软件可能已经发布过多个版本,其中的一些版本的快捷方式文件名称可能做了多次改动,程序中不可能记录每个版本的快捷方式名称,没法直接去删除快捷方式文件。本文就给出一种有效的处理办…

01:HAL库DMA解算舵机

一:实现效果 DMA解算舵机 从下到上分别为舵机1,2,3,分别由函数Servo_SetAngle1(),Servo_SetAngle2(),Servo_SetAngle3()控制。 舵机1…

anaconda的基础用法

python和包以及anaconda的概念关系 环境 “好比一栋楼,在楼里面分配一间屋给各种‘包’放,每间房里面的‘包’互不影响” 激活环境 “告诉电脑,我现在要用这个屋子里面的‘包’来做东西了所以要进这间屋子” 移除环境 “现在这个屋子里…

基于Java的冬奥会科普平台

开头语:你好,我是计算机学姐码农小野。如果你对冬奥会科普平台感兴趣或有其他技术需求,欢迎随时私信我。 开发语言:Java 数据库:MySQL 技术:Java、B/S架构 工具:MyEclipse、MySQL 系统展示…

最值得入手的宠物空气净化器!希喂、352、安德迈真实测评~

随着天气越来越热,猫咪们也都开始掉毛啦。这时候,家里面到处都飘浮着猫咪们的浮毛和粑粑异味。抵抗力较差的铲屎官,身体就会出现一些问题,例如打喷嚏、咳嗽等呼吸道问题。 很多铲屎官以为用粘毛器、吸尘器等工具就能将猫咪们掉落…

欢乐钓鱼大师游戏攻略:萌新必备攻略大全!钓鱼脚本!

《欢乐钓鱼大师》是一款休闲益智类游戏,以钓鱼为主题,玩家需要通过各种钓鱼任务和挑战,收集不同种类的鱼类,并提升自己的钓鱼技术和装备。本文将为大家详细解析游戏的各个方面,帮助玩家更好地掌握游戏技巧,…

PAT B1008. 数组元素循环右移问题

题目描述 一个数组A中存有N(N>O)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M≥0)个位置,即将A中的数据由( …)变换为(……)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,则应如何设计移动的方法?输…

FastAdmin后台开发框架 lang 任意文件读取漏洞复现

0x01 产品简介 FastAdmin是一款基于PHPBootstrap的开源后台框架,专为开发者精心打造。它基于ThinkPHP和Bootstrap两大主流技术构建,拥有完善的权限管理系统和一键生成CRUD等强大功能。FastAdmin致力于提高开发效率,降低开发成本,…

第二证券炒股知识:新手炒股要注意什么风险?

股票商场作为现代金融商场的重要组成部分,招引了众多出资者的目光。但是关于新手来说炒股赚钱并不是那么简单的,其间蕴含着诸多危险。关于新手炒股要注意什么危险,中航资本下面就为大家具体介绍一下。 新手炒股要注意的危险: 1、…

云计算【第一阶段(16)】安装及管理程序

一、linux 应用程序基础 当我们主机安装linux操作系统 时候,也会同时安装一些软件或网络服务等等,但是随着系统一起安装的软件包毕竟他是少数的, 能够实现的功能也是有限的,那么我们相拥为主机提供更多更丰富的功能的时候&#x…

OpenAI 600万天价年薪震惊网友,全美顶尖AI公司薪酬大曝光!

最近,一张美国科技大厂的薪酬表曝出,OpenAI以500万起薪领衔。初创公司给出的薪酬,竟然超过了所有大型科技公司。不过初级码农,时薪却低至85元。 顶级公司的AI工程师能挣多少钱? 最近,这张美国科技大公司的…

“非遗+全身动作捕捉设备”如何打造交互式叙事新消费场景?

在数字化时代,非遗传承渠道逐渐数字化、科技化,利用“虚拟人全身动作捕捉设备”技术提升了非遗文化的社会能见度,让非遗文化重新吸引年轻人的目光。 “虚拟人全身动作捕捉设备”,可以让虚拟人化身虚拟主持人、虚拟主播、虚拟嘉宾…

图-多叉树的直径(hard)

目录 一、问题描述 二、解题思路 1.存储结构 2.算法描述 三、代码实现 四、刷题链接 五、参考 一、问题描述 二、解题思路 1.存储结构 使用邻接表结构来存储无向图,边结点存储结构为[终点,边长(也就是权重)] 2.算法描述 从某一个结点(…

STM32开发过程中碰到的问题总结 - 3

文章目录 前言1. keil5升级到最新版本使用armV6编译工具链编译不通过2. 最新的keil用Jlink调试失败3. 移动了目录后跑不起来了4. 串口兼容了GNU 和arm只会,编译出来的成果物,串口输出不正常5.STM32下哪些IO口可以作为中断触发去使用6. 触发GPIO10的外部中…