影像就是陣列

基礎入門1 分鐘2026年10月4日

你將學到

  • 灰階與彩色影像如何對應到 NumPy 陣列
  • shape、dtype 與通道順序的實際意義
  • 每個人都會踩到的兩個坑:BGR 順序與 uint8 溢位

直覺

數位影像是一個取樣網格,每個取樣點(也就是像素)儲存一個亮度值。灰階影像是形狀為 (H,W)(H, W) 的二維陣列;彩色影像多了一個通道軸,形狀為 (H,W,3)(H, W, 3)。

I:{0,…,H−1}×{0,…,W−1}→{0,…,255}I : \{0, \dots, H-1\} \times \{0, \dots, W-1\} \to \{0, \dots, 255\}

第一個索引是列(yy,由上往下),第二個索引是行(xx,由左往右),和數學課上習慣的 (x,y)(x, y) 順序剛好相反。

程式碼

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])                    # 先列、後行

練習

  1. 讀入一張影像,印出每個顏色通道的平均值。哪一個最大?
  2. 只用陣列切片把影像上下翻轉。