opencv kmeans使用 圖像色彩量化為例

kmeans聚類實現(xiàn)灰度圖像色彩量化(使用更少灰度值表示原灰度圖像)

# coding: utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt

#讀取原始圖像灰度顏色
img = cv2.imread('d:/paojie_g.jpg', 0) 
#print(img.shape)

#獲取圖像高度糕韧、寬度
rows, cols = img.shape[:]

#圖像二維像素轉(zhuǎn)換為一維
data = img.reshape((rows * cols))
data = np.float32(data)

#定義中心 (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS +
            cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

#設(shè)置標簽
flags = cv2.KMEANS_RANDOM_CENTERS

#K-Means聚類 聚集成4類
compactness, labels, centers = cv2.kmeans(data, 4, None, criteria, 10, flags)

#生成最終圖像
res = centers[labels.flatten()]
dst = res.reshape((img.shape[0],img.shape[1]))

#用來正常顯示中文標簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = [u'原始圖像', u'聚類圖像']  
images = [img, dst]  
for i in range(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

程序輸出結(jié)果

使用4種灰度值表示原圖像

kmeans聚類實現(xiàn)彩色圖像色彩量化(使用更少色彩值表示原彩色圖像)

# coding: utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt

#讀取原始圖像
img = cv2.imread('d:paojie.png') 
print(img.shape)

#圖像二維像素轉(zhuǎn)換為一維
data = img.reshape((-1,3))
data = np.float32(data)

#定義中心 (type,max_iter,epsilon)
criteria = (cv2.TERM_CRITERIA_EPS +
            cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)

#設(shè)置標簽
flags = cv2.KMEANS_RANDOM_CENTERS

#K-Means聚類 聚集成2類
compactness, labels2, centers2 = cv2.kmeans(data, 2, None, criteria, 10, flags)
print('compactness:', compactness)
print('labels2.shape:', labels2.shape)
print('centers2.shape:', centers2.shape)
print('labels2:\n', labels2)
print('centers2:\n', centers2)

#K-Means聚類 聚集成4類
compactness, labels4, centers4 = cv2.kmeans(data, 4, None, criteria, 10, flags)

#K-Means聚類 聚集成8類
compactness, labels8, centers8 = cv2.kmeans(data, 8, None, criteria, 10, flags)

#K-Means聚類 聚集成16類
compactness, labels16, centers16 = cv2.kmeans(data, 16, None, criteria, 10, flags)

#K-Means聚類 聚集成64類
compactness, labels64, centers64 = cv2.kmeans(data, 64, None, criteria, 10, flags)

#圖像轉(zhuǎn)換回uint8二維類型
centers2 = np.uint8(centers2)
res = centers2[labels2.flatten()]
print('res:\n', res)
dst2 = res.reshape((img.shape))

centers4 = np.uint8(centers4)
res = centers4[labels4.flatten()]
dst4 = res.reshape((img.shape))

centers8 = np.uint8(centers8)
res = centers8[labels8.flatten()]
dst8 = res.reshape((img.shape))

centers16 = np.uint8(centers16)
res = centers16[labels16.flatten()]
dst16 = res.reshape((img.shape))

centers64 = np.uint8(centers64)
res = centers64[labels64.flatten()]
dst64 = res.reshape((img.shape))

#圖像轉(zhuǎn)換為RGB顯示
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst2 = cv2.cvtColor(dst2, cv2.COLOR_BGR2RGB)
dst4 = cv2.cvtColor(dst4, cv2.COLOR_BGR2RGB)
dst8 = cv2.cvtColor(dst8, cv2.COLOR_BGR2RGB)
dst16 = cv2.cvtColor(dst16, cv2.COLOR_BGR2RGB)
dst64 = cv2.cvtColor(dst64, cv2.COLOR_BGR2RGB)

#用來正常顯示中文標簽
plt.rcParams['font.sans-serif']=['SimHei']

#顯示圖像
titles = [u'原始圖像', u'聚類圖像 K=2', u'聚類圖像 K=4',
          u'聚類圖像 K=8', u'聚類圖像 K=16',  u'聚類圖像 K=64']  
images = [img, dst2, dst4, dst8, dst16, dst64]  
for i in range(6):  
   plt.subplot(2,3,i+1), plt.imshow(images[i], 'gray'), 
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

控制臺輸出

控制臺輸出內(nèi)容

量化結(jié)果輸出

彩色圖像色彩量化結(jié)果展示
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拦坠,一起剝皮案震驚了整個濱河市僧鲁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌船侧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晨汹,居然都是意外死亡,警方通過查閱死者的電腦和手機贷盲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門淘这,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事铝穷‰Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵氧骤,是天一觀的道長呻疹。 經(jīng)常有香客問我,道長筹陵,這世上最難降的妖魔是什么刽锤? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮朦佩,結(jié)果婚禮上并思,老公的妹妹穿的比我還像新娘。我一直安慰自己语稠,他們只是感情好宋彼,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仙畦,像睡著了一般输涕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慨畸,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天莱坎,我揣著相機與錄音,去河邊找鬼寸士。 笑死檐什,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的弱卡。 我是一名探鬼主播乃正,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婶博!你這毒婦竟也來了瓮具?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凡蜻,失蹤者是張志新(化名)和其女友劉穎搭综,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體划栓,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡兑巾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忠荞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋歌。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡帅掘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堂油,到底是詐尸還是另有隱情修档,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布府框,位于F島的核電站吱窝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏迫靖。R本人自食惡果不足惜院峡,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望系宜。 院中可真熱鬧照激,春花似錦、人聲如沸盹牧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汰寓。三九已至口柳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踩寇,已是汗流浹背啄清。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俺孙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓掷贾,卻偏偏與公主長得像睛榄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子想帅,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容