PIL庫的簡單操做

灰度圖和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的內容。
lUE1wd.jpg指針

相關文章
相關標籤/搜索