coding羊最近在和幾個小伙伴做一個小項目序无,想開發(fā)一個“圖片處理小公舉”,哦不衡创,是小工具帝嗡。可以實現(xiàn)基本的剪切璃氢、拼接哟玷、旋轉(zhuǎn),再加上模糊化一也、融合巢寡、變色等等酷炫功能。
目前項目做了一半椰苟,其中遇到了很多困難抑月,這里分享一下我學(xué)習(xí)的經(jīng)歷,也可以作為大家入門Python GUI(圖形界面)和Python圖片圖片處理的很好素材吧舆蝴!
用PIL工具包做圖片處理
PIL是Python Imaging Library谦絮,是Python做圖片處理的一個功能強(qiáng)大的包,這里不說太多怎么使用這個包和這個包里面有哪些功能(因為我也只學(xué)了其中一丟丟hhh)洁仗。我們要做的P圖工具呢层皱,主要要實現(xiàn)“剪切”、“模糊”赠潦、“銳化”叫胖、“刻板&浮雕”、“黑白”甚至“融合”這些功能她奥,而這些功能PIL直接提供了臭家!你說6不6疲陕? ——“6!”
話不多說钉赁,上代碼:
1.引入圖片處理包和相關(guān)的工具:
import PIL from PIL import Image,ImageFilter
2.打開圖片:
img=Image.open("3.jpg") img.show()
我的圖片3.jpg是放在跟這個py文件一個文件夾里面的蹄殃,如果圖片在其他地方,需要加上詳細(xì)的地址你踩。
img.show()
是顯示圖片的作用诅岩。
3.來一個旋轉(zhuǎn)吧!
img.rotate(180).show()
這樣就把圖片旋轉(zhuǎn)了180度带膜,你也可以寫90度吩谦、270度等等。
4.改變圖片大邢ヅ骸:
new_img=img.resize((1280,1024))
5.好戲來了式廷,加濾鏡!
img1=img.filter(ImageFilter.BLUR)
img1.show()
img2=img.filter(ImageFilter.DETAIL)
img2.show()
img3=img.filter(ImageFilter.CONTOUR) #!!!
img3.show()
img4=img.filter(ImageFilter.EDGE_ENHANCE_MORE) #邊緣銳化
img4.show()
img5=img.filter(ImageFilter.EMBOSS) #!!!
img5.show()
img6=img.filter(ImageFilter.GaussianBlur(radius=10))
# ↑radius越大芭挽,模糊程度越大滑废!
img6.show()
img8=img.filter(ImageFilter.SHARPEN)
img8.show()
img9=img.filter(ImageFilter.SMOOTH)
img9.show()
img10=img.filter(ImageFilter.ModeFilter(size=20))
# 類似聚類,圖片壓縮袜爪∪涑茫看起來像油畫一樣。
img10.show()
img11=img.filter(ImageFilter.MaxFilter(size=5))
#MaxFilter是用一個區(qū)域內(nèi)像素最大點(diǎn)代替該區(qū)域所有點(diǎn)
img11.show()
img12=img.filter(ImageFilter.MinFilter(size=15))
img12.show()
img13=img.filter(ImageFilter.UnsharpMask(radius=5,percent=300,threshold=3)) #某種銳化
img13.show()
上面所有的ImageFilter.XXX
都是濾鏡辛馆,你可以看到有多少種濾鏡了吧俺陋!當(dāng)時真是把我驚呆了。
【不過很多濾鏡基本就是平光鏡昙篙,幾乎跟原圖沒區(qū)別···】
上面我有注釋的腊状,和標(biāo)!L伞缴挖!的,都是效果很明顯的硕蛹,大家可以自己試一試效果醇疼。
6.圖片融合:
我試著把扎克伯格和馬云的頭像融合了一下:
變↓
哈哈哈~~~~
頓時發(fā)現(xiàn)那些我們在朋友圈轉(zhuǎn)的那些“預(yù)測自己兒子女兒的長相”硕并、“預(yù)測自己老了以后的相貌”法焰,其實就是圖片融合的技術(shù)啊倔毙!
原來這么簡單埃仪!
還騙大家瘋轉(zhuǎn),哎陕赃,學(xué)點(diǎn)編程防止被騙吧卵蛉!
(當(dāng)然了颁股,人家肯定還用來人臉識別之類的一些技術(shù),但也是很基礎(chǔ)了~)
好了好了傻丝,廢話有點(diǎn)多甘有,說說怎么做的吧:
new_img2=Image.blend(img1.convert('RGBA'),img2.convert("RGBA"),alpha=0.5) #圖片融合!哈哈哈
new_img2.show()
注意葡缰!這個blend函數(shù)亏掀,要求兩個圖片一樣大、一樣的模式
我在之前已經(jīng)把img1和img2調(diào)整好了泛释,這里又加了一個convert()函數(shù)把它們都轉(zhuǎn)化成RGBA模式滤愕。
這個alpha代表兩個圖片相對的權(quán)重。
7.圖片處理好了怜校,怎么保存下來凹溆啊?
搜易Z茄茁!
new_img.save(new.jpg)
就好了魂贬。
好了,這個PIL包的使用就這么多了胰丁,其他更多的功能大家自己去摸索學(xué)習(xí)哦随橘!
附:PIL學(xué)習(xí)資料:
1.PIL文檔
2.計算機(jī)視覺編程
其他有意思的資料:
歡迎關(guān)注我的系列哦~
讓我們一步步地從0到1做出一款實用軟件出來!(o)/~
而且我跟你說锦庸,好戲還在后面呢机蔗![奸笑~]