python—PIL庫影像處理
- 2019 年 10 月 8 日
- 筆記
這裡主要說的是PIL, PIL(Python Image Library)是python的第三方影像處理庫,但是由於其強大的功能與眾多的使用人數,幾乎已經被認為是python官方影像處理庫了。其官方主頁為:PIL。 PIL歷史悠久,原來是只支援python2.x的版本的,後來出現了移植到python3的庫pillow
所以直接給你電腦安裝pillow就可以使用了
pip install pillow
首先先獲取圖片,然後對圖片修改尺寸。
圖片原圖:
程式碼:
from PIL import Image image = Image.open('lufei.png') image = image.resize((150, 200), Image.ANTIALIAS) print(type(image))
將圖片轉換為灰度值影像用convert函數:
程式碼:
from PIL import Image image = Image.open('lufei.png') m = image.convert('L') m.show()
效果:
將圖片保存則用save函數:
m.save('lefei.png')
如果想將灰度值還原為rgb的格式,只需要底下在寫一條句子,將L換成RGB
將灰度值反相,可以得到一種不一樣的效果,將灰度值轉為矩陣,再用255-去矩陣的數值,接著用fromarray函數還原成Image的格式。
from PIL import Image import numpy as np image = Image.open('lufei.png') im = image.convert('L') m = np.array(im) m = 255-m img =Image.fromarray(m) img.show()
將圖片的顏色通道分離用split函數:
from PIL import Image image = Image.open('lufei.png') image.show() r,g,b = image.split() r.show() g.show() b.show()
將圖片的顏色通道合併用merge函數:
from PIL import Image image = Image.open('lufei.png') r,g,b = image.split() im_merge = Image.merge("RGB",[b,g,r]) im_merge.show()
不同的rgb排列方式會得到不同的顏色效果
對圖片的像素操作,強化像素的效果:
左邊為像素值*1.5,中間原圖,右邊*2.5的效果比較
point()函數:
from PIL import Image image = Image.open('lufei.png') im_point = image.point(lambda x:x*2.5) im_point.show()
小應用:
利用python做一個影像轉字元串,並保存到文本之中。
首先導入PIL庫和numpy庫
讀取圖片,並將圖片重新調整大小,接著轉換為矩陣,轉換為矩陣的時候,
矩陣是一個(x,y,z)的數據,x和y是他的長和寬,然後z是他的rgb數值,0就是r,1就是g,2就是b。
然後定義一個數值轉換為字元的字元表備用
接著做一個轉換函數,按一定比例,將一定的rgb數據轉為特定字元,接著再利用之前獲取到的矩陣的長度和寬度,獲取矩陣的像素的rgb數據,傳給轉換函數C,再將獲得到的字元串寫入文本文件即可
from PIL import Image import numpy as np image = Image.open('lufei.png') image = image.resize((150, 200), Image.ANTIALIAS) img = np.array(image) x = np.shape(img) W = x[0] H = x[1] C_char = list(" 0") def C(r,g,b): leng = len(C_char) g = int(0.2126 * r + 0.7152 * g + 0.0722 * b) u = (256.0+1)/leng return C_char[int(g/u)] t = '' for i in range(W): for j in range(H): r = img[i][j][0] g = img[i][j][1] b = img[i][j][2] t+=C(r,g,b) t+=' ' t+='n' txt = open('w.txt','w') txt.write(t)