iT邦幫忙

1

【python好用模組-pillow】好用的影像處理工具,並理解影像的陣列表示

今天要學習的是python的影像處理工具,
使用前,必須先安裝pillow模組
pip install pillow

但是引用模組時打的名稱是import PIL

版本資訊:
Spyder->python3.7
Pillow版本7.0.0

前置準備

首先,我用工具「小畫家」畫了一個30x30像素的黃色圖片,
黃色的RGB值為(255,255,0),
圖片如下:
https://ithelp.ithome.com.tw/upload/images/20200711/20117114QafhtmQtOE.png

我將其存檔為yellow.png

基本操作

可以透過open()函數建立一個影像物件

這邊列舉一些常用屬性

屬性 涵義
size 取得影像大小
filename 取得檔案名稱
format 取得檔案副檔名

範例:

from PIL import Image
pic = Image.open('yellow.png')
width, height = pic.size
print("影像寬度=", width)
print("影像高度=", height)
print("檔案名稱為:", pic.filename)
print("檔案副檔名為:", pic.format)

結果:

影像寬度= 30
影像高度= 30
檔案名稱為: yellow.png
檔案副檔名為: PNG

影像轉陣列

要把一張影像轉為陣列,
可以用numpy模組,
範例:

from PIL import Image
import numpy as np
pic = Image.open('yellow.png')
pic_nums = np.array(pic)
print(pic_nums.shape)
print(pic_nums)

結果:

(30, 30, 3)
[[[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]

 [[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]

 [[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]

 ...

 [[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]

 [[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]

 [[255 255   0]
  [255 255   0]
  [255 255   0]
  ...
  [255 255   0]
  [255 255   0]
  [255 255   0]]]

可以看到陣列的維度是30x30x3
30x30是代表矩陣的寬與高,
3則是代表RGB,
每個像素點都是RGB三個顏色組成,
由於黃色的RGB值為(255,255,0),
因此把陣列印出便得到許多[255 255 0]

其它(待補充…)

這個模組還有其它影像處理的好用函數,
之後有機會再補充說明


尚未有邦友留言

立即登入留言