使用Python,OpenCV,K-Means聚類查找圖像中最主要的顏色

使用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; // 新增的組…