1. 程式人生 > 其它 >例項1:影象的陣列表示

例項1:影象的陣列表示

>>>影象的陣列表示

影象的RGB色彩模式【影象一般使用RGB色彩模式,即每個畫素點的顏色由紅(R)、綠(G)、藍(B)組成】

RGB三個顏色通道的變化和疊加得到各種顏色,其中,它們的取值範圍均在 0-255

疊加起來形成的顏色種類為 256^3

#PIL庫

PIL庫是一個具有強大影象處理能力的第三方庫【如果使用Spyder,則已經安裝好了】,命令列下的安裝方法:pip install pillow

from PIL import Image

Image 是PIL庫中代表一個影象的類(物件)

# 影象的陣列表示

【影象是一個由畫素組成的二維矩陣,每個元素是一個RGB值】

左圖可以變成右圖,右圖是一個在X Y軸上形成的一個畫素的陣列,每個畫素都是一個RGB值,RGB值:(R,G,B)中每一個是一個位元組, 因此影象是以三個位元組作為元素形成的一個二維元素

 

from PIL import Image

import numpy as np

im = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/favorite.jpg"))  
#注意路徑複製過來不能直接使用,需稍作修改,'\' 改為 '/' 或 '\\' 或 路徑前加r

print(im.shape,im.dtype)
(700, 700, 3) uint8 #三維陣列,分別是影象的 高度、寬度、畫素RGB值,其中第三維元素RGB有三個元素,即R、G、B分別由unit8來表示
注意路徑複製過來不能直接使用,需稍作修改,'\' 改為 '/' 或 '\\' 或 路徑前加r,
因為在windows系統當中讀取檔案路徑可以使用\,但是在python字串中\有轉義的含義,eg:'\n'代表換行,
所以我們需要採取一些方式使得\不被解讀為轉義字元

>>>影象的變換
【陣列可經過運算進行變換,而影象由陣列構成】
1)開啟一個影象,然後進行RGB的運算
2)將運算後的陣列再生成一個影象型別
3)將其儲存為檔案
 1 from PIL import Image
 2 
 3 import numpy as np 
 4 
 5 a = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/structure.jpg")) #開啟
 6 
 7 print(a.shape,a.dtype)
 8 (439, 658, 3) uint8
 9 
10 b = [225,225,225] -a #補值
11 
12
im = Image.fromarray(b.astype('uint8')) #重新生成一個影象物件 13 14 im.save("C:/Users/Public/Pictures/Saved Pictures/structure2.jpg")#儲存新影象

    

from PIL import Image 
import numpy as np
a = np.array(Image.open("C:/Users/Public/Pictures/Saved Pictures/structure.jpg").convert('L'))  
#呼叫PIL庫中的convert('L'):將一個彩色值圖片變為一個灰度值圖片,則再生成的陣列降為二維陣列 b = 225-a #c = (100/255)*a + 150 區間變換(當前圖片做一個灰度壓縮,再擴充區間範圍) #d = 255 * (a/255)**2 區間平方 im = Image.fromarray(b.astype('uint8')) im.save("C:/Users/Public/Pictures/Saved Pictures/structure2.jpg")

         

                                                   b                                                                                      c

 

總結:可通過修改陣列變換那一行程式碼實現影象的任意變換

【可是為什麼要取補值】