Python通過PIL獲取圖片主要顏色并和顏色庫(kù)進(jìn)行對(duì)比的方法
本文實(shí)例講述了Python通過PIL獲取圖片主要顏色并和顏色庫(kù)進(jìn)行對(duì)比的方法。分享給大家供大家參考。具體分析如下:
這段代碼主要用來從圖片提取其主要顏色,類似Goolge和Baidu的圖片搜索時(shí)可以指定按照顏色搜索,所以我們先需要將每張圖片的主要顏色提取出來,然后將顏色劃分到與其最接近的顏色段上,然后就可以按照顏色搜索了。
在使用google或者baidu搜圖的時(shí)候會(huì)發(fā)現(xiàn)有一個(gè)圖片顏色選項(xiàng),感覺非常有意思,有人可能會(huì)想這肯定是人為的去劃分的,呵呵,有這種可能,但是估計(jì)人會(huì)累死,開個(gè)玩笑,當(dāng)然是通過機(jī)器識(shí)別的,海量的圖片只有機(jī)器識(shí)別才能做到。
那用python能不能實(shí)現(xiàn)這種功能呢?答案是:能
利用python的PIL模塊的強(qiáng)大的圖像處理功能就可以做到,下面上代碼:
def get_dominant_color(image):
#顏色模式轉(zhuǎn)換,以便輸出rgb顏色值
image = image.convert('RGBA')
#生成縮略圖,減少計(jì)算量,減小cpu壓力
image.thumbnail((200, 200))
max_score = None
dominant_color = None
for count, (r, g, b, a) in image.getcolors(image.size[0] * image.size[1]):
# 跳過純黑色
if a == 0:
continue
saturation = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)[1]
y = min(abs(r * 2104 + g * 4130 + b * 802 + 4096 + 131072) >> 13, 235)
y = (y - 16.0) / (235 - 16)
# 忽略高亮色
if y > 0.9:
continue
# Calculate the score, preferring highly saturated colors.
# Add 0.1 to the saturation so we don't completely ignore grayscale
# colors by multiplying the count by zero, but still give them a low
# weight.
score = (saturation + 0.1) * count
if score > max_score:
max_score = score
dominant_color = (r, g, b)
return dominant_color
使用方法:
from PIL import Image print get_dominant_color(Image.open('logo.jpg'))
這樣就會(huì)返回一個(gè)rgb顏色,但是這個(gè)值是很精確的范圍,那我們?nèi)绾螌?shí)現(xiàn)百度圖片那樣的色域呢??
其實(shí)方法很簡(jiǎn)單,r/g/b都是0-255的值,我們只要把這三個(gè)值分別劃分相等的區(qū)間,然后組合,取近似值。例如:劃分為0-127,和128-255,然后自由組合,可以出現(xiàn)八種組合,然后從中挑出比較有代表性的顏色即可。
當(dāng)然我只是舉一個(gè)例子,你也可以劃分的更細(xì),那樣顯示的顏色就會(huì)更準(zhǔn)確~~大家趕快試試吧
希望本文所述對(duì)大家的python程序設(shè)計(jì)有所幫助。
- Python3中正則模塊re.compile、re.match及re.search函數(shù)用法詳解
- python 3.7.0 下pillow安裝方法
- Python實(shí)現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)
- python正則表達(dá)式re之compile函數(shù)解析
- python通過pil將圖片轉(zhuǎn)換成黑白效果的方法
- python安裝pil庫(kù)方法及代碼
- python使用pil進(jìn)行圖像處理(等比例壓縮、裁剪)實(shí)例代碼
- python中PIL安裝簡(jiǎn)單教程
- python通過pil為png圖片填充上背景顏色的方法
- Python中請(qǐng)不要再用re.compile了
- Python實(shí)現(xiàn)圖片裁剪的兩種方式(Pillow和OpenCV)
- python3讀取圖片并灰度化圖片的四種方法(OpenCV、PIL.Image、TensorFlow方法)總結(jié)
- Python的PIL庫(kù)中g(shù)etpixel方法的使用
- Python3安裝Pillow與PIL的方法
- Linux上安裝Python的PIL和Pillow庫(kù)處理圖片的實(shí)例教程
- python實(shí)現(xiàn)通過pil模塊對(duì)圖片格式進(jìn)行轉(zhuǎn)換的方法
- python使用PIL模塊獲取圖片像素點(diǎn)的方法
- Python圖像處理庫(kù)PIL詳細(xì)使用說明
相關(guān)文章
Python鍵鼠操作自動(dòng)化庫(kù)PyAutoGUI簡(jiǎn)介(小結(jié))
這篇文章主要介紹了Python鍵鼠操作自動(dòng)化庫(kù)PyAutoGUI簡(jiǎn)介,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Django數(shù)據(jù)庫(kù)遷移報(bào)錯(cuò)InconsistentMigrationHistory
最近在使用Django,學(xué)習(xí)了一下Django數(shù)據(jù)庫(kù)遷移,在執(zhí)行遷移命令時(shí),突然報(bào)錯(cuò),本文就總結(jié)了一下原因,感興趣的小伙伴們可以參考一下2021-05-05python和flask中返回JSON數(shù)據(jù)的方法
下面小編就為大家整理了一篇python和flask中返回JSON數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03Python爬蟲進(jìn)階之Beautiful Soup庫(kù)詳解
這篇文章主要介紹了Python爬蟲進(jìn)階之Beautiful Soup庫(kù)詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04基于Python編寫一個(gè)語(yǔ)音合成系統(tǒng)
這篇文章主要介紹了如何利用Python制作一個(gè)語(yǔ)音合成系統(tǒng),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下2022-03-03Python matplotlib實(shí)時(shí)畫圖案例
這篇文章主要介紹了Python matplotlib實(shí)時(shí)畫圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python實(shí)現(xiàn)提取谷歌音樂搜索結(jié)果的方法
這篇文章主要介紹了Python實(shí)現(xiàn)提取谷歌音樂搜索結(jié)果的方法,涉及Python針對(duì)谷歌音樂相關(guān)信息的獲取技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07