旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 如何使用python中matplotlib庫分析圖像顏色

如何使用python中matplotlib庫分析圖像顏色

時(shí)間:2020-08-26來源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-08-26點(diǎn)擊量:作者:Sissi



  用代碼分析圖像可能很困難。你如何使代碼“理解”圖像的上下文?
 

  通常,使用AI分析圖像的第一步 是找到主要顏色。在如何使用python中matplotlib庫分析圖像顏色中,我們將使用matplotlib的 image類在圖像中找到主色 。查找主導(dǎo)色也是你可以使用第三方API進(jìn)行的操作,但是我們將構(gòu)建自己的系統(tǒng)來執(zhí)行此操作,以便我們可以完全控制該過程。
 

  我們將首先研究將圖像轉(zhuǎn)換為矩陣形式的其組成顏色,然后對它執(zhí)行k均值聚類以找到主要顏色。
 

  先決條件
 

  如何使用python中matplotlib庫分析圖像顏色假定你了解Python的基礎(chǔ)知識,但你以前無需使用Python處理圖像。
 

  如何使用python中matplotlib庫分析圖像顏色基于以下內(nèi)容:
 

  1)Python版本3.6.5

  2)matplotlib版本2.2.3:解碼圖像并可視化主色

  3)scipy版本1.1.0:執(zhí)行確定主導(dǎo)顏色的聚類
 

  軟件包 matplotlib , scipy 可以通過軟件包管理器安裝 pip。你可能需要在虛擬環(huán)境中安裝特定版本的軟件包, 以確保與正在處理的其他項(xiàng)目的依賴項(xiàng)沒有沖突。

如何使用python中matplotlib庫分析圖像顏色
 

  此外,我們將在如何使用python中matplotlib庫分析圖像顏色中分析JPG圖像,僅當(dāng)你安裝其他包裝枕頭時(shí),該支持才可用。
 

如何使用python中matplotlib庫分析圖像顏色
 

  另外,你也可以只使用Jupyter筆記本。如何使用python中matplotlib庫分析圖像顏色的代碼在Anaconda 1.8.7版的Jupyter筆記本上運(yùn)行。以上這些程序包已預(yù)先安裝在Anaconda中。
 

如何使用python中matplotlib庫分析圖像顏色
 

  解碼圖像
 

  圖像可能具有各種擴(kuò)展名-JPG,PNG,TIFF很常見。這篇文章只關(guān)注JPG圖片,但是其他圖片格式的處理應(yīng)該不會有太大不同。該過程的第一步是讀取圖像。
 

  具有JPG擴(kuò)展名的圖像作為點(diǎn)列表(稱為像素)存儲在內(nèi)存中。甲 像素,或一個(gè)圖像元素,表示的圖像中的一個(gè)點(diǎn)。點(diǎn)的顏色由三個(gè)值的組合確定-它的三個(gè)分量顏色(紅色,藍(lán)色和綠色)。像素的顏色本質(zhì)上是這三種顏色的組合。

如何使用python中matplotlib庫分析圖像顏色
 

  讓我們使用下面的圖片來查找圖像中的主色。你可以在此處下載圖像 。
 

  要在Python中讀取圖像,你需要導(dǎo)入 (documentation)image 類 。 圖像類的 方法將圖像解碼為其RGB值。該方法的輸出 是一個(gè)尺寸為M x N x 3的數(shù)組,其中M和N是圖像的尺寸。matplotlibimread()imread()

如何使用python中matplotlib庫分析圖像顏色
 

  你可以使用的 類的 imshow() 方法 來顯示圖像,該圖像采用RGB值矩陣的形式。Matplotlib pyplot

如何使用python中matplotlib庫分析圖像顏色
 

  我們從該imread() 方法獲得的矩陣取決于所讀取圖像的類型。例如,PNG圖像還將包含一個(gè)用于測量像素透明度的元素。這篇文章將只涵蓋JPG圖片。
 

  在繼續(xù)對圖像進(jìn)行聚類之前,我們需要執(zhí)行其他步驟。在找出圖像的主要顏色的過程中,我們不關(guān)心像素的位置。因此,我們需要將M x N x 3矩陣轉(zhuǎn)換為三個(gè)單獨(dú)的列表,其中包含各自的紅色,藍(lán)色和綠色值。以下代碼段將存儲在圖像中的矩陣轉(zhuǎn)換為三個(gè)單獨(dú)的列表,每個(gè)列表的長度為40,000(200 x 200)。

如何使用python中matplotlib庫分析圖像顏色
 

  上面的代碼段創(chuàng)建三個(gè)空列表,然后通過我們的圖像的每個(gè)像素循環(huán),附加的RGB值,以我們的 r, g和 b 分別列出。如果正確完成,則每個(gè)列表的長度將為40,000(200 x 200)。
 

  集群基礎(chǔ)
 

  現(xiàn)在我們已經(jīng)存儲了圖像的所有組成色,是時(shí)候找到主要顏色了。現(xiàn)在讓我們花一點(diǎn)時(shí)間來了解聚類的基本知識,以及它如何幫助我們找到圖像中的主要色彩。
 

  聚類是一項(xiàng)有助于根據(jù)特定屬性將相似項(xiàng)目分組在一起的技術(shù)。我們將對 上面剛剛創(chuàng)建的三種顏色的列表應(yīng)用 k均值聚類。
 

  每個(gè)聚類中心的顏色將反映聚類所有成員的屬性的平均值,這將有助于我們確定圖像中的主要顏色。
 

  有幾種主要顏色?
 

  在我們對像素?cái)?shù)據(jù)點(diǎn)執(zhí)行k均值聚類之前,對并非所有圖像都具有相同數(shù)量的主色,找出一個(gè)給定圖像理想的聚類可能對我們來說是一件好事。
 

  由于我們正在處理三個(gè)用于聚類的變量-像素的紅色,藍(lán)色和綠色值-我們可以在三個(gè)維度上可視化這些變量,以了解可能存在多少種主色。
 

  要在中制作3D圖 matplotlib,我們將使用 Axes3D() 類(文檔)。使用Axes3D() 該類初始化軸后,我們使用該 scatter 方法,并將三個(gè)顏色值列表用作參數(shù)。
 

如何使用python中matplotlib庫分析圖像顏色
 

  在結(jié)果圖中,我們可以看到點(diǎn)的分布形成了兩個(gè)拉長的簇。通過查看它,我們可以看到圖像主要由兩種顏色組成,這一事實(shí)也支持了這一點(diǎn)。因此,在下一節(jié)中,我們將重點(diǎn)介紹創(chuàng)建兩個(gè)群集。
 

  首先,盡管如此,我們可能會猜測3D圖可能無法為某些圖像生成不同的聚類。另外,如果我們使用的是PNG圖像,則將有第四個(gè)拼合度(每個(gè)像素的透明度值),這將使得無法在三個(gè)維度上進(jìn)行繪制。在這種情況下,你可能需要使用 彎頭方法來確定理想的群集數(shù)。
 

  在SciPy中執(zhí)行聚類
 

  在上一步中,我們確定需要兩個(gè)聚類,現(xiàn)在可以對數(shù)據(jù)執(zhí)行k-均值聚類了。讓我們創(chuàng)建一個(gè)Pandas數(shù)據(jù)框來輕松管理變量。

如何使用python中matplotlib庫分析圖像顏色
 

  使用SciPy進(jìn)行k均值聚類的過程實(shí)質(zhì)上涉及三個(gè)步驟:
 

  1)通過將每個(gè)數(shù)據(jù)點(diǎn)除以其標(biāo)準(zhǔn)偏差來標(biāo)準(zhǔn)化變量。我們將使用該類的 whiten() 方法 vq。

  2)使用該kmeans() 方法生成集群中心 。

  3)使用類的vq() 方法 為每個(gè)數(shù)據(jù)點(diǎn)生成群集標(biāo)簽 vq。
 

  上面的第一步確保每個(gè)變量的變化均等地影響聚類。想象一下兩個(gè)尺度差異很大的變量。如果我們忽略上面的第一步,那么規(guī)模和變化較大的變量將對簇的形成產(chǎn)生更大的影響,從而使過程產(chǎn)生偏差。因此,我們使用whiten() 函數(shù)將變量標(biāo)準(zhǔn)化 。該 whiten() 函數(shù)采用一個(gè)參數(shù),變量值的列表或數(shù)組,然后返回標(biāo)準(zhǔn)化值。標(biāo)準(zhǔn)化后,我們將打印數(shù)據(jù)框的樣本。請注意,標(biāo)準(zhǔn)化列中列的變化已大大減少。

如何使用python中matplotlib庫分析圖像顏色
 

  下一步是使用標(biāo)準(zhǔn)化列執(zhí)行k均值聚類。我們將使用kmeans() 執(zhí)行聚類的 功能。的 kmeans() 功能(文檔)具有兩個(gè)參數(shù)-的意見和簇的數(shù)目。它返回兩個(gè)值-聚類中心和變形。失真是每個(gè)點(diǎn)與其最近的群集中心之間的距離平方的總和。在如何使用python中matplotlib庫分析圖像顏色中,我們不會使用失真。

如何使用python中matplotlib庫分析圖像顏色
 

  k均值聚類的最后一步是生成聚類標(biāo)簽。但是,在本練習(xí)中,我們不需要這樣做。我們僅在尋找由聚類中心表示的主色。
 

  顯示主要顏色
 

  我們已經(jīng)執(zhí)行了k均值聚類并生成了聚類中心,所以讓我們看看它們包含哪些值。

如何使用python中matplotlib庫分析圖像顏色
 

  如你所見,我們得到的結(jié)果是 RGB值的標(biāo)準(zhǔn)化版本。為了獲得原始顏色值,我們需要將它們與標(biāo)準(zhǔn)偏差相乘。
 

  我們將使用的 類imshow() 方法 以調(diào)色板的形式顯示顏色。但是,要顯示顏色, 需要RGB值在0到1的范圍內(nèi),其中1表示我們原始RGB值比例中的255。因此,我們必須將群集中心的每個(gè)RGB分量除以255,以獲得0到1之間的值,并通過該方法顯示它們 。matplotlibpyplotimshow()imshow()
 

  最后,在使用imshow()函數(shù)(文檔)繪制顏色之前,我們還要多加考慮 。聚類中心的尺寸為N x 3,其中N是聚類數(shù)。 imshow() 最初旨在顯示顏色的AXB矩陣,因此需要3D尺寸為A x B x 3的數(shù)組(調(diào)色板中每個(gè)塊包含三個(gè)顏色元素)。因此,我們需要通過將聚類中心的顏色作為單個(gè)元素的列表傳遞,將N x 3矩陣轉(zhuǎn)換為1 x N x 3矩陣。例如,如果我們將顏色存儲在其中, colors 則需要[colors] 作為參數(shù)傳遞 給 imshow()。
 

  讓我們探索圖像中的主要色彩。

如何使用python中matplotlib庫分析圖像顏色
 

  不出所料,圖像中看到的顏色與我們開始使用的圖像中的突出顏色非常相似。也就是說,你可能已經(jīng)注意到上面的淺藍(lán)色實(shí)際上并未出現(xiàn)在我們的源圖像中。請記住,聚類中心是每個(gè)聚類中所有像素的所有RGB值的均值。因此,最終的聚類中心實(shí)際上可能不是原始圖像中的顏色,而只是RBG值位于聚類中心,即圖像中所有看起來相似的像素。
 

  結(jié)論
 

  在如何使用python中matplotlib庫分析圖像顏色中,我們逐步研究了如何使用matplotlib 和查找Python中圖像的主色 scipy。我們從JPG圖像開始,然后使用imread() 中的圖像類方法 將其轉(zhuǎn)換為RGB值 matplotlib。然后,我們使用進(jìn)行k均值聚類, scipy 以找到主要顏色。最后,我們使用imshow()中的pyplot 類 方法 顯示了主色 matplotlib。


 

預(yù)約申請免費(fèi)試聽課

填寫下面表單即可預(yù)約申請免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ 5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖