Python通過PIL獲取圖片主要顏色并和顏色庫進(jìn)行對比的方法
本文實例講述了Python通過PIL獲取圖片主要顏色并和顏色庫進(jìn)行對比的方法。分享給大家供大家參考。具體分析如下:
這段代碼主要用來從圖片提取其主要顏色,類似Goolge和Baidu的圖片搜索時可以指定按照顏色搜索,所以我們先需要將每張圖片的主要顏色提取出來,然后將顏色劃分到與其最接近的顏色段上,然后就可以按照顏色搜索了。
在使用google或者baidu搜圖的時候會發(fā)現(xiàn)有一個圖片顏色選項,感覺非常有意思,有人可能會想這肯定是人為的去劃分的,呵呵,有這種可能,但是估計人會累死,開個玩笑,當(dāng)然是通過機(jī)器識別的,海量的圖片只有機(jī)器識別才能做到。
那用python能不能實現(xiàn)這種功能呢?答案是:能
利用python的PIL模塊的強(qiáng)大的圖像處理功能就可以做到,下面上代碼:
def get_dominant_color(image):
#顏色模式轉(zhuǎn)換,以便輸出rgb顏色值
image = image.convert('RGBA')
#生成縮略圖,減少計算量,減小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'))
這樣就會返回一個rgb顏色,但是這個值是很精確的范圍,那我們?nèi)绾螌崿F(xiàn)百度圖片那樣的色域呢??
其實方法很簡單,r/g/b都是0-255的值,我們只要把這三個值分別劃分相等的區(qū)間,然后組合,取近似值。例如:劃分為0-127,和128-255,然后自由組合,可以出現(xiàn)八種組合,然后從中挑出比較有代表性的顏色即可。
當(dāng)然我只是舉一個例子,你也可以劃分的更細(xì),那樣顯示的顏色就會更準(zhǔn)確~~大家趕快試試吧
希望本文所述對大家的python程序設(shè)計有所幫助。
- Python3中正則模塊re.compile、re.match及re.search函數(shù)用法詳解
- python 3.7.0 下pillow安裝方法
- Python實現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)
- python正則表達(dá)式re之compile函數(shù)解析
- python通過pil將圖片轉(zhuǎn)換成黑白效果的方法
- python安裝pil庫方法及代碼
- python使用pil進(jìn)行圖像處理(等比例壓縮、裁剪)實例代碼
- python中PIL安裝簡單教程
- python通過pil為png圖片填充上背景顏色的方法
- Python中請不要再用re.compile了
- Python實現(xiàn)圖片裁剪的兩種方式(Pillow和OpenCV)
- python3讀取圖片并灰度化圖片的四種方法(OpenCV、PIL.Image、TensorFlow方法)總結(jié)
- Python的PIL庫中g(shù)etpixel方法的使用
- Python3安裝Pillow與PIL的方法
- Linux上安裝Python的PIL和Pillow庫處理圖片的實例教程
- python實現(xiàn)通過pil模塊對圖片格式進(jìn)行轉(zhuǎn)換的方法
- python使用PIL模塊獲取圖片像素點的方法
- Python圖像處理庫PIL詳細(xì)使用說明
相關(guān)文章
python實現(xiàn)nao機(jī)器人手臂動作控制
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)nao機(jī)器人手臂動作控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04
Pandas出現(xiàn)KeyError的問題解決及分析
本文主要介紹了Pandas出現(xiàn)KeyError的問題解決及分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
詳解Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié)
這篇文章主要介紹了Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
修改Python的pyxmpp2中的主循環(huán)使其提高性能
這篇文章主要介紹了修改Python的pyxmpp2中的主循環(huán)使其提高性能,pyxmpp2是Python中使用需XMPP協(xié)議的一個常用工具,要的朋友可以參考下2015-04-04
Python3.4實現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法示例
這篇文章主要介紹了Python3.4實現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法,涉及Python網(wǎng)絡(luò)連接、讀取、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

