PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)
Hello!今天我們來學(xué)習(xí)一下這個神奇的圖片處理的第三方函數(shù)庫——PIL庫
(本blog部分圖片及代碼來自網(wǎng)絡(luò))
這是一個支持圖像存儲、顯示和處理的函數(shù)庫,它能夠處理幾乎所有圖像格式,可以完成對圖像的縮放、裁剪、疊加以及圖像添加條紋,文字等信息等的操作。
首先是利用pip下載一個:
?
它有許多子庫,例如:Image、ImageChops、ImageDraw等等,他們各有神通,發(fā)揮著自己的作用,
首先我們當(dāng)然學(xué)習(xí)的是經(jīng)典的Image子庫;
| 方法 | 描述 |
| Image.open(filename) | 根據(jù)參數(shù)加載圖像文件 |
| Image.new(mode,size,color) | 根據(jù)給定參數(shù)創(chuàng)建一個新的圖像 |
| Image.open(StringIO.StringIO(buffer)) | 從字符串中獲取圖像 |
| Image.frombytes(mode,size,data) | 根據(jù)像素點data創(chuàng)建圖像 |
| Image.verify() | 對圖像文件完整性進行檢查,返回異常 |
?
?
?
?
?
參考:http://pillow-cn.readthedocs.io/zh_CN/latest/reference/index.html?
?首先對于使用的工具:基于WIN10,Python3.7.2,Pillow5.4.1
對于Image模塊:
首先我認(rèn)識到一個簡單的例子:讀取下載好的圖片并將它可視化(代碼如下):
from PIL import Image im = Image.open('test1.jpg') # 讀取圖片 im.show() # 可視化這里的“test.jpg”是我剛剛下載好的來自網(wǎng)絡(luò)的圖片放置在桌面上;
然后運行!
通過使用相關(guān)的圖片查看器,我們就可以打開自己桌面上圖片進行可視化了,我們甚至還可以用其他代碼對圖片進行調(diào)整:
from PIL import Image im = Image.open('test1.jpg') # 讀取圖片 im.rotate(45).show() # 將圖片旋轉(zhuǎn),并用系統(tǒng)自帶的圖片工具顯示圖片諾!對比上圖,我們的圖片被旋轉(zhuǎn)了45度,這些只是比較基本的操作,我們依然可以對圖片進行更加多的改變!
圖像灰度化處理:
這是一張彩色的建筑圖,我覺得太鮮艷了,又比較喜歡一種黑白色調(diào)顯得低調(diào)深沉就像我一樣,那么我可以使用下面的代碼:
from PIL import Image img = Image.open("test3.jpg") # 灰度化:將RGB/RGBA -> L img = img.convert("L") img.show()效果如下:
不得不說,很耐斯!
還有很多效果滴:
在Image.filter(filter)中:
# BLUR - 模糊處理
# CONTOUR - 輪廓處理
# DETAIL - 增強
# EDGE_ENHANCE - 將圖像的邊緣描繪得更清楚
# EDGE_ENHANCE_NORE - 程度比EDGE_ENHANCE更強
# EMBOSS - 產(chǎn)生浮雕效果
# SMOOTH - 效果與EDGE_ENHANCE相反,將輪廓柔和
# SMOOTH_MORE - 更柔和
# SHARPEN - 效果有點像DETAIL
再對“test3.jpg”進行處理:
(浮雕效果)
?
(輪廓效果)
?…………還有很多…………
and各種處理方案:
Image.getbands()
Image.geebbox()
Image.getcolors(maxcolor=256)
Image.getdata(band=None)(一般和list()結(jié)合使用)
Image.getextrema()
Image.getpixel((x,y))
Image.histogram(mask=None,extrema=None)
接下來是縮略圖的學(xué)習(xí),我們有時候為了節(jié)約儲存空間,會將原來的圖片進行壓縮,通過等比例壓縮之后會變成縮略圖,那么如何用Image庫來實現(xiàn)呢??
話不多說,先上代碼!
from PIL import Image im = Image.open('test3.jpg') size = im.size if size[0] > size[1]:rate = float(200) / float(size[0]) else:rate = float(128) / float(size[1]) new_size = (int(size[0] * rate), int(size[1] * rate)) new = im.resize(new_size, Image.BILINEAR) new.save('n.jpg') im.show('n.jpg')想知道這是什么神仙代碼嗎?
看得出我還是使用了“test3.jpg”這張圖,我想要將它壓縮并另存為一個壓縮后的圖片存到桌面上,然后打開看看效果如何;
很明顯桌面上多了一個新圖片,這就是另存的壓縮圖了;
?查看效果如上,這個圖片顯然比原圖小了很多,拉近了看還是十分模糊的呢,這就是等比例縮小后的縮略圖“n.jpg”啦~?
?接下來就是自制“美顏相機”啦~
我們的生活現(xiàn)在離不開手機,手機又剛好有自拍功能,這滿足了我們沒事“卡擦卡擦”拍照看看自己的盛世美顏的需求,但是也不是每一次拍照都能很好地滿足我們的虛榮心和好勝的心理,畢竟……我們對自己可是很嚴(yán)格的!!!特別是顏值!!!
所以才會催生出各種P圖軟件,那么我們自己可不可以做呢??
當(dāng)然~
代碼呢?來人!上代碼!!
from PIL import Image from PIL import ImageEnhance import cv2 import numpy as np# image = Image.open('test4.jpg') #image.show() def BrightnessEnhancement(brightness):image = Image.open('test4.jpg')enh_bri = ImageEnhance.Brightness(image) # brightness =1.5image_brightened = enh_bri.enhance(brightness)image_brightened.show()def ContrastEnhancement(contrast):image = Image.open('test4.jpg')enh_con = ImageEnhance.Contrast(image) # contrast =1.5image_contrasted = enh_con.enhance(contrast)image_contrasted.show()def ColorEnhancement(color): image = Image.open('test4.jpg')enh_col = ImageEnhance.Color(image) # color =0.8image_colored = enh_col.enhance(color)image_colored.show()def SharpnessEnhancement(sharpness):image = Image.open('test4.jpg')enh_sha = ImageEnhance.Sharpness(image) # sharpness = 2image_sharped = enh_sha.enhance(sharpness)image_sharped.show()def Filter(image):image =cv2.imread('test4.jpg')Remove=cv2.bilateralFilter(image,0,0,10)cv2.imshow('filter',Remove)cv2.waitKey(0)cv2.destroyAllWindows() # res = np.uint8(np.clip((1.2 * image + 10), 0, 255)) # tmp = np.hstack((dst, res)) # cv2.imshow('bai',res)def WhiteBeauty(image,whi):image =cv2.imread('test4.jpg')white = np.uint8(np.clip((whi * image + 50), 0, 255))cv2.imshow('bai',white)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ =="__main__":filepath = 'test4.jpg'#原始圖像brightness = 1.5contrast = 0.2color=1.9sharpness=0.1BrightnessEnhancement(brightness)ContrastEnhancement(contrast)ColorEnhancement(color)SharpnessEnhancement(sharpness)whi = 1.2image =cv2.imread('test4.jpg')Filter(image)WhiteBeauty(image,whi)這是原圖:
這是美白后的:
?灰度處理:
以及等等……(受限于篇幅不一一列舉)
?對一個GIF每一幀進行提取:
?
from PIL import Image im = Image.open('gif2.gif') # 讀入一個GIF文件 try:im.save('aa{:02d}.png'.format(im.tell()))while True:im.seek(im.tell()+1)im.save('new{:02d}.png'.format(im.tell())) except:print("處理結(jié)束") 結(jié)果:
?接下來就是激動人心的時刻了!我們要做動圖!!
首先要下載一個第三方庫——imageio
然后就可以上代碼了:
import imageiodef create_gif(image_list, gif_name):frames = []for image_name in image_list:frames.append(imageio.imread(image_name))# Save them as frames into a gif imageio.mimsave(gif_name, frames, 'GIF', duration = 1)returndef main():image_list = ['t1.png','t2.png','t3.png','t4.png']gif_name = 'finallgif.gif'create_gif(image_list, gif_name)if __name__ == "__main__":main()效果:
?
由于有些分辨率的不統(tǒng)一所以會有黃邊,不要在意呀~
轉(zhuǎn)載于:https://www.cnblogs.com/iconangle/p/10683223.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net core 与ELK(2)安装E
- 下一篇: 关于缓存雪崩\穿透\击穿等一些问题