灰度圖和RGB圖
灰度圖是一個二維數組,每一個值都表示這個像素點的灰度值(0到255之間的一個值),數組的維度(shape)則表示這個圖片的長寬(單位像素px),先看個例子python
from PIL import Image
import numpy as np
data = np.ones((16, 16), dtype=np.uint8) # 建立一個全1的數組
data = data * 255 # 數組全部元素乘以255
print(data)
data[4:12, 8] = 0 # 將中間的一些值置爲0
print(data)
img = Image.fromarray(data, 'L') # 將一個二維數組轉換成灰度圖
img.show() # 在屏幕顯示圖片
咱們看一下顯示的圖片,會看到一個1。而後咱們再去看data,你會發現也能夠看到一個1。這是否是就很好理解了。算法
RGB圖片是一個三維數組(長,寬,3),其實你徹底能夠把他當作一個和灰度圖同樣的二維數組,即維度爲(長,寬)。這樣每一個元素的值就是一個一維數組,而這個一維數組是有三個元素組成的[R, G, B], 而將他轉爲灰度圖也很簡單,只須要將這個一維數組按照某種規則轉換成一個0-255之間的值就好了,PIL中是這樣轉換的:L = R * 299/1000 + G * 587/1000+ B * 114/1000。數組
RGBA圖片則是一個三維數組 (長,寬, 4),若是當作二維數組的話, 每一個元素的是一個由四個元素組成的一維數組,即[R, G, B, A], A表示透明度。微信
PIL庫
from PIL import Image
屬性機器學習
- Image.mode: 圖片的格式,例如灰度'L', 彩色'RGB', 'RGBA'
- Image.size: 圖片的尺寸大小
- Image.info: 圖片的信息
方法學習
- Image.open(path): 打開圖片
- Image.new(mode, size, color=0): 建立新圖片,通常用不到
- Image.fromarray(array, mode=None): 將numpy數組轉換爲圖片,能夠指定mode
- Image.frombytes(mode, size, data, coder_name ='raw', **args):從字節流中讀取圖片,coder_name爲解碼器
- Image.convert(mode=None, matrix=None, dither=None, palette=0, colors=256): 將圖片轉換格式,例如由灰度轉換爲RGB
convert('RGB')
- Image.crop(box): 截取圖片,box是一個(左,上,右,下)的元組,也就是相對於左上角(0,0)的像素值
- Image.draft(mode, size):返回一個縮略圖,格式爲mode,大小爲size。也就是說你能夠將原來很大的圖片縮小到你給定的size
- Image.getbands(): RGB圖返回('R', 'G', 'B'), 灰度圖返回(L, ),知道是幹什麼了的吧
- Image.getbbox(): 舉個例子,一個512x512的圖片會返回(0, 0, 512, 512),分別是(左,上,右,下)
- Image.copy(): 複製圖片
- Image.getextrema(): 返回最大和最小的值(0-255), 若是是灰度圖,則返回全部值的最大和最小值(min, max), 若是是RGB圖則返回((Rmin, Rmax), (Gmin, Gmax), (Bmin, Bmax))
- Image.getpixel((x, y)): 返回給定位置的像素值, 灰度圖爲單值,RGB圖爲一維數組
- Image.paste(im, box=None, mask=None): 將一張圖片粘貼在該圖片,box是粘貼的位置,能夠是(0, 0)的元組,即(左,上)開始, 也能夠是(左,上,右,下),不給定默認爲(0, 0)。mask不知道什麼意思
- Image.putpixel((x, y), value): 在指定位置修改像素值
- Image.resize(size, resample=None): 從新調整圖片大小,resample不知道什麼意思
- Image.rotate(angle, resample=None, expand=None): 旋轉圖片,expand表示是否擴展圖片以顯示全部內容,默認不擴展,即旋轉後的圖片和原始圖片大小同樣
- Image.save(fp, format=None): fp能夠爲文件名或文件對象,通常寫文件名就行。format爲保存的圖片格式,默認根據文件名後綴選擇
- Image.show(): 在屏幕上顯示該圖片
- Image.split():將圖片分割,若是是RGB則分割成R,G,B三個圖像
- Image.thumbnail(size, resample=1): 同Image.draft
- Image.transpose(): 旋轉90度,同Image.rotate(90)
- Image.verify(): 判斷圖片是否損壞
- Image.close(): 關閉文件指針,通常不須要
還有一些高級方法就不說了,那些基本用不上,想知道的直接看官方文檔吧。ui
最後,我正在學習一些機器學習的算法,對於一些我須要記錄的內容我都會分享到博客和微信公衆號(python成長路),歡迎關注。平時的話通常分享一些爬蟲或者Python的內容。
指針