使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色

分别把跑图聚类选取1, 2, 3,4, 5, 6, 7,8, 9种主要颜色并绘制colormap颜色图;

效果图

分别把跑图聚类选取3,4, 5,7,9种主要颜色并绘制colormap颜色图,跑图和颜色图汇总如下:
在这里插入图片描述
分别把跑图聚类选取1,2, 4,6,8种主要颜色并绘制colormap颜色图,跑图和颜色图汇总如下:
在这里插入图片描述
分别聚类1-10种颜色得到的主要颜色排布如下:
在这里插入图片描述

换一张绚烂的落日图,分别聚类1-10种颜色得到的主要颜色排布如下:
在这里插入图片描述

源码见如下链接:

https://blog.csdn.net/qq_40985985/article/details/109738677?spm=1011.2415.3001.5331

# python color_kmeans.py --image images/cactus.jpg --clusters 3
# 导入必要的包
import argparseimport cv2
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeansdef centroid_histogram(clt):# 获取不同聚簇的个数,根据每个聚簇的像素数生成直方图# k均值算法将图像中的每个像素分配给最近的聚类。numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)(hist, _) = np.histogram(clt.labels_, bins=numLabels)# 对直方图进行归一化,使得总和为1hist = hist.astype("float")hist /= hist.sum()# 返回直方图return hist# plot_colors函数需要两个参数:
# hist,它是从centroid_histogram函数生成的直方图;
# centroids,是由k-means算法生成的质心(集群中心)的列表。
def plot_colors(hist, centroids):# 初始化代表相对频率的每种颜色的条形图# 定义了一个300×50像素的矩形,以容纳图像中最主要的颜色bar = np.zeros((50, 300, 3), dtype="uint8")startX = 0# 遍历每一个聚簇的百分比及颜色for (percent, color) in zip(hist, centroids):# 绘制每一聚簇的相对百分比endX = startX + (percent * 300)cv2.rectangle(bar, (int(startX), 0), (int(endX), 50),color.astype("uint8").tolist(), -1)startX = endX# 返回条形图return bar# 构建命令行参数和解析
# --image 原始图像路径
# --clusters 期望生成的簇数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=False,# default='bm_sports/sports/sporthealth-3-20250722-235354.jpg',default='bm_sports/sports/IMG_20250703_194927.jpg',help="Path to the image")
ap.add_argument("-c", "--clusters", required=False, default=5, type=int,help="# of clusters")
args = vars(ap.parse_args())# 加载图像,转换BGR-->RGB 以在matplotlib展示
image = cv2.imread(args["image"])
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 展示图像
plt.figure(200 * 100)
plt.axis("off")
plt.imshow(image)# 将NumPy数组重塑为RGB像素列表
image = image.reshape((image.shape[0] * image.shape[1], 3))def plot_subplots(kmeans_list, bar_list):plt.figure()width_col = 1if len(bar_list) > 5:width_col = 2for i in range(len(bar_list)):plt.subplot(len(bar_list)//width_col, width_col, i + 1)plt.imshow(bar_list[i])  # 通过for循环逐个显示图像plt.title('kmeans=' + str(kmeans_list[i]))plt.xticks([])  # 去掉x轴的刻度plt.yticks([])  # 去掉y轴的刻度plt.show()bar_list = []
kmeans_list = [3, 4, 5, 7, 9]
kmeans_list = [1, 2, 4, 6, 8]
kmeans_list = list(range(1, 11))
for cluster in kmeans_list:args['clusters'] = cluster# 使用scikit-learn中的K-means实现来避免重新实现该算法# 使用K-means查找图像中最主要的颜色# 使用期望获取的聚簇数,初始化局KMeans类,调用fit()方法将像素列表聚集在一起clt = KMeans(n_clusters=args["clusters"])clt.fit(image)# 构建聚簇直方图# 建立图表以代表每一种颜色所对应的像素数hist = centroid_histogram(clt)bar = plot_colors(hist, clt.cluster_centers_)bar_list.append(bar)plot_subplots(kmeans_list, bar_list)

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

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

相关文章

DBAPI 实现分页查询的两种方法

DBAPI 实现分页查询的两种方法 背景 在进行分页查询时,用户通常需要传入当前页码 pageNo 和每页显示的条数 pageSize 参数。根据这两个参数,我们可以从数据库中查询出当前页的数据。以 MySQL 为例,分页查询的 SQL 语句如下: se…

第五天上课 SSLPolicy策略和Network Discovery技术

SSL Policy场景1:拥有自家服务器的私钥,解密访问自家服务器的ssl流量场景2: 内部用户访问互联网的ssl流量,需要解密并重签名Correlation and Compliance相关性与合规性配置相关性与合规性策略,在10.1.1.0/24网络中,当通过Network …

进阶07:C#与通用OPC UA通信范例

本节目标: 1)安装软件,搭建虚拟OPC UA服务器; 2)使用UaExpert,读取OPC UA服务器中的变量; 3)编写Winform程序,读写服务器中变量值,创建订阅触发事件&#…

大模型微调学习笔记(基于讯飞星辰MaaS速学版)

文章目录参考资料说明大模型微调入门微调简介微调步骤数据准备模型选择训练方式效果评估模型部署大模型微调(基于讯飞星辰Maas)构建数据集方法1:预置数据集方法2:创建数据集数据辅助工具数据集划分模型微调数据配置参数配置模型部…

[CSS]让overflow不用按shift可以滚轮水平滚动(纯CSS)

前言 我不爽前端无法直接滚轮横向滚动很久了 明明浏览器可以直接判断 x滚动且y不滚动的时候滚轮事件可以直接操作横向滚动 这个是我探究出来的方法,尤其适合这种很多很多小tag的情况解析 原理是将竖向排列的overflow旋转成横向,实际操作的还是竖向overflow.继而实现鼠标滚轮不用…

截稿倒计时 TrustCom‘25大会即将召开

会议资讯IEEE TrustCom-2025(第24届IEEE计算与通信领域信任、安全与隐私国际会议)是一个展示可信计算、通信、网络和机器学习领域前沿成果的学术平台。会议聚焦计算机系统、网络及人工智能在信任、安全、隐私、可靠性、可依赖性、生存性、可用性和容错性…

Day4.AndroidAudio初始化

1.AudioServer初始化 AudioServer 是 Android 音频系统的核心服务,负责管理音频硬件资源、音频策略调度、跨进程音频通信等核心功能。它由 Init 进程启动,是系统核心服务之一,直接影响音频播放、录音、音效处理等功能的正常运行。 1.1AudioSe…

OSPF 协议(多区域)

1. OSPF 单区域存在的问题① LSDB庞大,占用内存大,SPF计算开销大;② LSA洪泛范围大,拓扑变化影响范围大;③ 路由不能被汇总,路由表庞大,查找路由开销大。2. OSPF 多区域优点① 每个区域独立存储…

R 语言绘制六种精美热图:转录组数据可视化实践(基于 pheatmap 包)

在转录组 Bulk 测序数据分析中,热图是展示基因表达模式、样本聚类关系的核心可视化工具。一张高质量的热图不仅能清晰呈现数据特征,更能提升研究成果的展示效果。本文基于 R 语言的pheatmap包,整理了六种适用于不同场景的热图绘制方法&#x…

图片PDF识别工具:扫描PDF文件批量OCR区域图识别改名,识别大量PDF区域内容一次性改名

以下是使用“咕嘎批量OCR识别图片PDF多区域内容重命名导出表格系统”进行操作的具体步骤:1. 打开工具并获取区域坐标打开软件后,选择“PDF识别模式”。导入一个PDF文件作为样本,框选需要提取文字的区域,并保存区域坐标。如果有多个…

中国汽车能源消耗量(2010-2024年)

1419中国汽车能源消耗量(2010-2024年)发文主题分布数据来源中华人民共和国工业和信息化部-中国汽车能源消耗量查询中国汽车能源消耗量查询 (miit.gov.cn)时间跨度2010-2024年数据范围全国汽车企业数据指标本数据集包含包含传统汽车能源消耗量数据以及新能…

Python 实现服务器自动故障处理工具:从监控到自愈的完整方案

在服务器运维过程中,80% 的故障都是重复性的简单问题(如磁盘空间不足、内存泄漏、服务进程挂掉等)。本文将介绍如何使用 Python 开发一款轻量级自动故障处理工具,通过状态监控、异常诊断、自动修复三个核心模块,实现服务器常见故障的无人值守处理。 核心依赖库 psutil:跨…

图片上传 el+node后端+数据库

模版部分&#xff1a;鼠标悬浮到头像的部分就出现下拉框显示可以修改头像&#xff0c;el-upload是隐藏的&#xff0c;可能只是为了实现on-change函数和before-upload函数吧这块做的确实有点马虎了。<div class"r-content"><el-dropdown><span class&q…

[java 常用类API] 新手小白的编程字典

目录 1.API 1.1定义: 2.Object类 2.1 toString() 方法 2.2 equals() 方法 3. Arrays 类 3.1 equals() 方法 3.2 sort() 方法 3.2.1排序 3.2.2 自定义对象排序 3.3 binarySearch() 方法 3.4 copyOf() 方法 3.5 fill() 方法 3.6 toString() 方法 4.基本数据类型包装类 4.…

去除视频字幕 2, 使用 PaddleOCR 选取图片中的字幕区域, 根据像素大小 + 形状轮廓

有人问我在搞什么&#xff1a;就是做这里的第2步。问题描述这里误导&#xff0c;误判&#xff0c;太严重了。如果我把这个区域当做是 mask ,那么真正的目标会被去除掉还有什么建议吗&#xff1f;比如我能否根据这个mask 的大致形状来判断它是不是字幕&#xff0c; 如果不是细长…

Ubuntu 连接Visual SVN

Windows服务器上的svn仓库为&#xff1a; https://ldw_online:8443/svn/OnlineRepository/LVC IP地址为192.168.8.8 4. 从 Ubuntu 测试连通性 在 Ubuntu 上可以用&#xff1a; bash 复制编辑 curl -vk https://192.168.8.8:8443/ 如果返回 HTTP 头或 SSL 握手成功&#xff…

JAVA:Spring Boot 集成 Protobuf 的技术指南

🚀 1、简述 在分布式服务通信中,数据序列化与反序列化的效率对系统性能影响极大。Protocol Buffers(Protobuf) 是由 Google 提出的一种高效的结构化数据序列化协议,具有: 🔥 高性能(远优于 JSON/XML) 📦 跨语言支持 📉 较小的体积 本篇将带你了解如何在 Spring…

SQLServer内存释放工具介绍:一款实用的数据库性能优化助手

SQLServer内存释放工具介绍&#xff1a;一款实用的数据库性能优化助手 去发现同类优质开源项目:https://gitcode.com/ 在数据库管理中&#xff0c;内存释放是优化服务器性能的重要环节。本文将为您详细介绍一款名为SQLServer内存释放工具的开源项目&#xff0c;帮助您轻松管理…

《蓝耘容器全栈技术指南:企业级云原生与异构计算实战大全》

&#x1f31f; 嗨&#xff0c;我是Lethehong&#xff01;&#x1f31f; &#x1f30d; 立志在坚不欲说&#xff0c;成功在久不在速&#x1f30d; &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞⬆️留言收藏&#x1f680; &#x1f340;欢迎使用&#xff1a;小智初学计…

计算器3.0:实现用户自定义组件

前言&#xff1a; 马总给我提出计算器3.0新需求&#xff1a;可以在页面上输入一个组件&#xff0c;用户的组件库里面就多一个组件&#xff0c;用户就可以使用 一、解决方法&#xff1a; 1. 新增成员变量和初始化 // 新增的输入框 private InputBox newInputBox; // 新增的组…