Python | OpenCV 圖片縮放、旋轉與翻轉
📚 前言
在前面我們學會了如何進行 灰階化與色彩空間轉換。
這一篇要進一步學習 圖片縮放、旋轉與翻轉,這些都是影像幾何操作的基礎技巧,常用於影像前處理、資料增強 (Data Augmentation) 與特徵分析。
🔍 基本概念
- 縮放 (Resize):改變圖片大小,可依比例或指定解析度
- 旋轉 (Rotate):以指定角度旋轉圖片。
- 翻轉 (Flip):水平或垂直翻轉圖片。
💻 範例程式:圖片縮放
1 | import cv2 |

圖:圖片縮放示例
🔄 範例程式:圖片旋轉
1 | import cv2 |

圖:圖片旋轉示例
📌 補充:cv2.rotate() 與 cv2.getRotationMatrix2D() 的差異
在 OpenCV 裡有兩種常見的旋轉方式:
1. cv2.rotate()
- 用途:快速旋轉圖片到 固定角度。
- 支援角度:90° 順時針、90° 逆時針、180°。
- 優點:簡單、快速,程式碼短。
- 缺點:只能做固定角度旋轉,無法指定任意角度。
1 | rot90 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) |
2. cv2.getRotationMatrix2D() + cv2.warpAffine()
- 用途:旋轉圖片到 任意角度,並可同時縮放。
- 支援角度:任意角度(例如 30°、45°、120°)。
- 優點:彈性大,可以做精確控制。
- 缺點:程式碼稍微複雜,需要計算旋轉矩陣。
1 | (h, w) = img.shape[:2] |
🧩 差異比較表
| 方法 | 可旋轉角度 | 是否可縮放 | 適合情境 |
|---|---|---|---|
| cv2.rotate() | 固定角度 (90°, 180°) | ❌ | 快速旋轉到標準角度 |
| getRotationMatrix2D + warpAffine | 任意角度 | ✅ | 需要精確控制角度或縮放 |
📌 補充:為什麼沒有提到 transpose?
cv2.transpose()是矩陣轉置操作,效果看起來像是「順時針旋轉 90°」,但本質是沿主對角線翻轉,並且寬高互換。- 在基礎篇章裡,常見的操作是 resize、rotate、flip,所以沒有特別放進主要章節。
1 | # transpose 範例 |
🔃 範例程式:圖片翻轉
1 | import cv2 |

圖:圖片翻轉示例
⚠️ 注意事項
- 縮放插值方式:
cv2.resize()預設使用雙線性插值,若需更高品質可用cv2.INTER_CUBIC或cv2.INTER_LANCZOS4。 - 旋轉後邊界問題:旋轉可能造成圖片邊界裁切,可調整輸出大小避免。
- 翻轉用途:常用於資料增強 (Data Augmentation),增加訓練樣本多樣性。
- transpose 補充:屬於矩陣操作,效果類似旋轉 90°,但和
cv2.rotate()本質不同。
🎯 結語
這一篇我們學會了如何進行 圖片縮放、旋轉與翻轉,並且釐清了不同旋轉方法 (cv2.rotate 與 cv2.getRotationMatrix2D) 的差異,以及為什麼 transpose 沒有放在主要章節。這些幾何操作是影像處理的基礎,能幫助我們靈活調整圖片大小與方向。
在下一篇,我們將進一步學習 區域裁切與 ROI (Region of Interest) 應用,掌握如何針對影像中的特定區域進行操作,這在物件偵測、特徵分析與資料前處理中非常重要。
📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。
