用Python PIL實(shí)現(xiàn)幾個(gè)簡單的圖片特效
導(dǎo)入 numpy 、PIL
numpy用來做矩陣運(yùn)算,PIL用來讀取圖片。
import numpy as np from PIL import Image
讀取圖片,然后轉(zhuǎn)換成RGB模式存在矩陣?yán)?/strong>
im = Image.open(imagename).convert('RGB')
arr = np.array(im)
查看arr的shape,可以看到arr是個(gè)3維的數(shù)組,數(shù)組大小等于 長*寬*3
In [566]: arr.shape Out[566]: (313, 450, 3)
每個(gè)像素有3個(gè)數(shù)字表示,分別對(duì)應(yīng)(R,G,B)
IN [567]: arr[0][0] Out[567]: array([6, 4, 9], dtype=uint8)
原始圖片

彩色轉(zhuǎn)黑白
把像素的R,G,B三個(gè)通道數(shù)值都置為r*0.299+g*0.587+b*0.114
def blackWithe(imagename):
# r,g,b = r*0.299+g*0.587+b*0.114
im = np.asarray(Image.open(imagename).convert('RGB'))
trans = np.array([[0.299,0.587,0.114],[0.299,0.587,0.114],[0.299,0.587,0.114]]).transpose()
im = np.dot(im,trans)
return Image.fromarray(np.array(im).astype('uint8'))

流年
把R通道的數(shù)值開平方,然后乘以一個(gè)參數(shù)
def fleeting(imagename,params=12):
im = np.asarray(Image.open(imagename).convert('RGB'))
im1 = np.sqrt(im*[1.0,0.0,0.0])*params
im2 = im*[0.0,1.0,1.0]
im = im1+im2
return Image.fromarray(np.array(im).astype('uint8'))

舊電影
把像素的R,G,B三個(gè)通道數(shù)值,3個(gè)通道的分別乘以3個(gè)參數(shù)后求和,最后把超過255的值置為255
def oldFilm(imagename):
im = np.asarray(Image.open(imagename).convert('RGB'))
# r=r*0.393+g*0.769+b*0.189 g=r*0.349+g*0.686+b*0.168 b=r*0.272+g*0.534b*0.131
trans = np.array([[0.393,0.769,0.189],[0.349,0.686,0.168],[0.272,0.534,0.131]]).transpose()
# clip 超過255的顏色置為255
im = np.dot(im,trans).clip(max=255)
return Image.fromarray(np.array(im).astype('uint8'))

反色
這個(gè)最簡單了,用255減去每個(gè)通道的原來的數(shù)值
def reverse(imagename):
im = 255 - np.asarray(Image.open(imagename).convert('RGB'))
return Image.fromarray(np.array(im).astype('uint8'))

PS:示例
from PIL import Image, ImageFilter
# 打開一個(gè)jpg圖像文件,注意是當(dāng)前路徑:
im = Image.open('Penguins.jpg')
# 模糊
im2 = im.filter(ImageFilter.BLUR)
# 模糊可設(shè)置模糊的程度
im22 = im.filter(ImageFilter.BoxBlur(200))
# 輪廓濾波
im3 = im.filter(ImageFilter.CONTOUR)
# 邊緣增強(qiáng)濾波(銳化)
im4 = im.filter(ImageFilter.EDGE_ENHANCE)
# 浮雕濾波
im5 = im.filter(ImageFilter.EMBOSS)
# 尋找邊緣信息的濾波
im6 = im.filter(ImageFilter.FIND_EDGES)
im2.save('BLUR.jpg', 'jpeg')
im3.save('CONTOUR.jpg', 'jpeg')
im4.save('EDGE_ENHANCE.jpg', 'jpeg')
im5.save('EMBOSS.jpg', 'jpeg')
im6.save('FIND_EDGES.jpg', 'jpeg')
im22.save('BoxBlur(200).jpg', 'jpeg')
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配
OpenCV 是一個(gè)的跨平臺(tái)計(jì)算機(jī)視覺庫,可以運(yùn)行在 Linux、Windows 和 Mac OS 操作系統(tǒng)上,這篇文章主要給大家介紹了關(guān)于Python應(yīng)用案例之利用opencv實(shí)現(xiàn)圖像匹配的相關(guān)資料,需要的朋友可以參考下2024-08-08
Python樹的序列化與反序列化的實(shí)現(xiàn)
在本文中,我們將深入討論如何實(shí)現(xiàn)樹的序列化與反序列化算法,提供Python代碼實(shí)現(xiàn),并詳細(xì)說明算法的原理和步驟,感興趣的可以了解一下2023-11-11
Python requests請(qǐng)求超時(shí)的解決方案
在進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)爬取過程中,網(wǎng)絡(luò)請(qǐng)求超時(shí)是一個(gè)令人頭疼的問題,尤其在Python中,我們常常需要應(yīng)對(duì)各種網(wǎng)絡(luò)爬蟲、API調(diào)用或其他網(wǎng)絡(luò)操作,而網(wǎng)絡(luò)請(qǐng)求超時(shí)的原因千奇百怪,在本篇文章中,我們將深入探討Python requests請(qǐng)求超時(shí)的解決方案,需要的朋友可以參考下2024-12-12

