影像就是陣列
你將學到
- 灰階與彩色影像如何對應到 NumPy 陣列
shape、dtype與通道順序的實際意義- 每個人都會踩到的兩個坑:BGR 順序與
uint8溢位
直覺
數位影像是一個取樣網格,每個取樣點(也就是像素)儲存一個亮度值。灰階影像是形狀為 的二維陣列;彩色影像多了一個通道軸,形狀為 。
第一個索引是列(,由上往下),第二個索引是行(,由左往右),和數學課上習慣的 順序剛好相反。
程式碼
import cv2
import numpy as np
img = cv2.imread("cat.jpg") # 形狀 (H, W, 3),dtype 為 uint8,通道順序為 B、G、R
print(img.shape, img.dtype)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 用 matplotlib 顯示前先轉換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 形狀 (H, W)
y, x = 120, 200
print(gray[y, x]) # 先列、後行
練習
- 讀入一張影像,印出每個顏色通道的平均值。哪一個最大?
- 只用陣列切片把影像上下翻轉。