Python使用Pillow實(shí)現(xiàn)圖像基本變化
一、圖像處理
1. 灰度圖像
灰度圖像矩陣元素的取值范圍通常為 [0,255]
。因此其數(shù)據(jù)類型一般為8位無符號(hào)整數(shù)的(int8),這就是人們經(jīng)常提到的256灰度圖像。“0”表示純黑色,“255”表示純白色,中間的數(shù)字從小到大表示由黑到白的過渡色。在某些軟件中,灰度圖像也可以用雙精度數(shù)據(jù)類型(double)表示,像素的值域?yàn)?code>[0,1],0代表黑色,1代表白色,0到1之間的小數(shù)表示不同的灰度等級(jí)。二值圖像可以看成是灰度圖像的一個(gè)特例。
2. 二值圖像
一幅二值圖像的二維矩陣僅由0、1兩個(gè)值構(gòu)成,“0”代表黑色,“1”代白色。由于每一像素(矩陣中每一元素)取值僅有0、1兩種可能,所以計(jì)算機(jī)中二值圖像的數(shù)據(jù)類型通常為1個(gè)二進(jìn)制位。二值圖像通常用于文字、線條圖的掃描識(shí)別(OCR)和掩膜圖像的存儲(chǔ)。
3. 索引圖像
索引圖像的文件結(jié)構(gòu)比較復(fù)雜,除了存放圖像的二維矩陣外,還包括一個(gè)稱之為顏色索引矩陣MAP的二維數(shù)組。MAP的大小由存放圖像的矩陣元素值域決定,如矩陣元素值域?yàn)?code>[0,255],則MAP矩陣的大小為256x3,用MAP=[RGB]
表示。MAP中每一行的三個(gè)元素分別指定該行對(duì)應(yīng)顏色的紅、綠、藍(lán)單色值,MAP中每一行對(duì)應(yīng)圖像矩陣像素的一個(gè)灰度值,如某一像素的灰度值為64,則該像素就與MAP中的第64行建立了映射關(guān)系,該像素在屏幕上的實(shí)際顏色由第64行的[RGB]
組合決定。也就是說,圖像在屏幕上顯示時(shí),每一像素的顏色由存放在矩陣中該像素的灰度值作為索引通過檢索顏色索引矩陣MAP得到。索引圖像的數(shù)據(jù)類型一般為8位無符號(hào)整形(int8),相應(yīng)索引矩陣MAP的大小為256x3,因此一般索引圖像只能同時(shí)顯示256種顏色,但通過改變索引矩陣,顏色的類型可以調(diào)整。索引圖像的數(shù)據(jù)類型也可采用雙精度浮點(diǎn)型(double)。索引圖像一般用于存放色彩要求比較簡單的圖像,如Windows中色彩構(gòu)成比較簡單的壁紙多采用索引圖像存放,如果圖像的色彩比較復(fù)雜,就要用到RGB真彩色圖像。
4. RGB彩色圖像
RGB圖像與索引圖像一樣都可以用來表示彩色圖像。與索引圖像一樣,它分別用紅(R)、綠(G)、藍(lán)(B)三原色的組合來表示每個(gè)像素的顏色。但與索引圖像不同的是,RGB圖像每一個(gè)像素的顏色值(由RGB三原色表示)直接存放在圖像矩陣中,由于每一像素的顏色需由R、G、B三個(gè)分量來表示,M、N分別表示圖像的行列數(shù),三個(gè)M x N的二維矩陣分別表示各個(gè)像素的R、G、B三個(gè)顏色分量。RGB圖像的數(shù)據(jù)類型一般為8位無符號(hào)整形,通常用于表示和存放真彩色圖像,當(dāng)然也可以存放灰度圖像。
5. 圖像存儲(chǔ)方式
數(shù)字化圖像數(shù)據(jù)有兩種存儲(chǔ)方式:位圖存儲(chǔ)(Bitmap)和矢量存儲(chǔ)(Vector)
我們平常是以圖像分辨率(即像素點(diǎn))和顏色數(shù)來描述數(shù)字圖象的。
例如:一個(gè)800*600的圖像大小為:
彩色RGB:(800*600*3)/1024/1024=1.3733MB
灰度:1.373/3=0.46MB
二值圖:0.46/8=0.057MB
二、圖像處理基礎(chǔ)操作
1.查看圖片屬性
from skimage import io #導(dǎo)入io模塊,以讀取目標(biāo)路徑下的圖片 img = io.imread( ' ./tupian.jpg ')#讀取tupian.jpg文件 print(type(img )) #顯示類型 print( img .shape) #顯示尺寸 print(img. shape[0])#顯示高度print( img . shape[1])#顯示寬度 print( img . shape[2])#顯示圖片通道數(shù)print( img.size) #顯示總像素?cái)?shù) print(img .max( ) ) #顯示最大像素值 print(img .min( ) ) #顯示最小像素值 print(img.mean( )) #像素平均值 print( img[e][0]) #指定像素點(diǎn)的像素值 io.imshow( img) #io模塊下顯示圖像 io.show( ) #顯示圖像
2. 顯示RGB不同通道
img_r=image[:,, :,o] img_g=imagel:,:,1] img_b=image[:,:,2] plt.subplot(2,2,1) io.imshow(image) plt.subplot(2,2,2) io.imshow(img_r) plt.subplot(2,2,3) io.imshow(img_g) plt.subplot(2,2,4) io.imshow(img_b) plt.show()
3.PGB和HSV的轉(zhuǎn)換
#RGB→HSV max=max(R,G,B); min=min(R,G,B); V=max(R,G,B); S=(max-min)/max; if (R = max) H =(G-B)/(max-min)* 60; if (G = max) H = 120+(B-R)/(max-min)* 60; if (B = max) H = 240 +(R-G)/(max-min)* 60; if (H < 0) H = H+ 360;
#HSV→RGB if (s = 0) R=G=B=V; else H /= 60; i = INTEGER(H); f = H - i; a = V * ( 1 - s ); b = V * ( 1 - s * f ); c = V * ( 1 - s * (1 - f ) ); switch(i) case 0: R = V; G = c; B = a; case 1: R = b; G = v; B = a; case 2: R = a; G = v; B = c; case 3: R = a; G = b; B = v; case 4: R = c; G = a; B = v; case 5: R = v; G = a; B = b;
三、實(shí)例
1.導(dǎo)入第三方庫
from PIL import Image from matplotlib import pyplot as plt from PIL import ImageFilter from PIL import ImageEnhance
安裝第三方庫的方法:
pip install xxx
2.修改顯示的圖像大小的方法
print("默認(rèn)圖片大小是 ", plt.rcParams["figure.figsize"]) plt.rcParams["figure.figsize"] = (20, 10) print("修改后默認(rèn)圖片大小是", plt.rcParams["figure.figsize"])
3.打開一張圖片
img=Image.open(r'C:\Users\20415\Desktop\03.png') plt.imshow(img) plt.show()
4.轉(zhuǎn)換為灰階圖像
#去色處理 img_L=Image.open(r'C:\Users\20415\Desktop\03.png').convert("L") plt.imshow(img_L) plt.show()
5.對(duì)圖像進(jìn)行增強(qiáng)處理
#圖像增強(qiáng)處理 out = img.filter(ImageFilter.DETAIL) plt.subplot(121),plt.imshow(img),plt.title("befor") plt.subplot(122),plt.imshow(out),plt.title("after") plt.imshow(out) plt.show()
6.提高圖像清晰度
#將清晰度提高10倍 img_0=Image.open(r'C:\Users\20415\Desktop\03.png') shp=ImageEnhance.Sharpness(img_0) img_0_shp=shp.enhance(10) plt.subplot(121),plt.imshow(img_0),plt.title("befor") plt.subplot(122),plt.imshow(img_0_shp),plt.title("after") plt.show()
7.提高圖像對(duì)比度
#將對(duì)比度提高1.8倍 img_0=Image.open(r'C:\Users\20415\Desktop\03.png') enh = ImageEnhance.Contrast(img_0) img_0_cont=enh.enhance(1.8) plt.subplot(121),plt.imshow(img_0),plt.title("befor") plt.subplot(122),plt.imshow(img_0_cont),plt.title("after") plt.show()
8.提高圖像色彩飽和度
#將色彩飽和度提高1.8倍 img_1=Image.open(r'C:\Users\20415\Desktop\03.png') color=ImageEnhance.Color(img_1) img_1_cont=color.enhance(1.8) plt.subplot(121),plt.imshow(img_1),plt.title("befor") plt.subplot(122),plt.imshow(img_1_cont),plt.title("after") plt.show()
9.提高圖像亮度
#亮度 img2=Image.open(r'C:\Users\20415\Desktop\03.png') brg=ImageEnhance.Brightness(img2) img2_brg=brg.enhance(1.1) plt.subplot(121),plt.imshow(img2),plt.title("befor") plt.subplot(122),plt.imshow(img2_brg),plt.title("after") plt.show()
pillow官網(wǎng)
Pillow (PIL Fork) 9.2.0 documentation
以上就是Python使用Pillow實(shí)現(xiàn)圖像基本變化的詳細(xì)內(nèi)容,更多關(guān)于Python Pillow圖像變化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python Django框架介紹之模板標(biāo)簽及模板的繼承
今天給大家?guī)鞵ython Django框架的相關(guān)知識(shí),文中對(duì)模板標(biāo)簽及模板的繼承介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05Python自動(dòng)化操作Excel方法詳解(xlrd,xlwt)
Excel是Windows環(huán)境下流行的、強(qiáng)大的電子表格應(yīng)用。本文將詳解用Python利用xlrd和xlwt實(shí)現(xiàn)自動(dòng)化操作Excel的方法詳細(xì),需要的可以參考一下2022-06-06python正則表達(dá)式常見的知識(shí)點(diǎn)匯總
正則表達(dá)式提供了一些可用的匹配模式,比如忽略大小寫、多行匹配等,下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式常見的知識(shí)點(diǎn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Python paramiko 模塊淺談與SSH主要功能模擬解析
這篇文章主要介紹了Python paramiko 模塊詳解與SSH主要功能模擬,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02python opencv 檢測移動(dòng)物體并截圖保存實(shí)例
這篇文章主要介紹了python opencv 檢測移動(dòng)物體并截圖保存實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03