Like Share Discussion Bookmark Smile

J.J. Huang   2026-02-08   Python OpenCV 05.特徵與進階篇   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 透視變換與圖片校正

📚 前言

在前一篇我們學會了 特徵點偵測與匹配
這一篇要介紹 透視變換 (Perspective Transform)圖片校正 (Image Rectification),這是圖片幾何處理的重要技巧,能將傾斜或變形的圖片校正回正常視角,常用於文件掃描、場景校正、投影轉換等應用。

🎨 範例圖片


圖:範例圖片 document.png — 傾斜的文件

圖:範例圖片 board.png — 傾斜的投影幕

🔎 透視變換原理

原理說明

  • 透視變換是一種 射影變換 (Projective Transform),能將圖片中的四邊形區域映射到另一個矩形區域。
  • 常用於校正傾斜的文件、投影幕或場景。
  • 核心函式是 cv2.getPerspectiveTransform()cv2.warpPerspective()

參數說明

1
2
cv2.getPerspectiveTransform(srcPoints, dstPoints)
cv2.warpPerspective(src, M, dsize)
  • srcPoints:原始圖片中的四個點座標。
  • dstPoints:目標圖片中的四個點座標。
  • M:透視變換矩陣 (3x3)。
  • dsize:輸出圖片大小 (寬, 高)。

💻 範例程式 — 文件校正

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import cv2
import numpy as np

img = cv2.imread("document.png")

# 假設透視後矩形的四個角點座標 (需人工量測或用工具選取)
pts1 = np.float32([[180,180],[620,130],[220,470],[580,500]])

# 設定校正後的矩形大小
width, height = 400, 300
pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])

M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (width, height))

cv2.imshow("Original", img)
cv2.imshow("Corrected", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 原始傾斜文件與校正後的矩形文件

💻 範例程式 — 場景校正

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
import numpy as np

img = cv2.imread("board.png")

# 使用生成時的四個角點
pts1 = np.float32([[80,100],[520,70],[120,320],[480,330]])
pts2 = np.float32([[0,0],[400,0],[0,300],[400,300]])

M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (400,300))

cv2.imshow("Original", img)
cv2.imshow("Corrected", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 投影幕校正

📊 文件校正 vs 場景校正

類型 目的 角點來源 重點 常見應用
文件校正 把拍攝時傾斜的文件校正成正矩形,方便閱讀或 OCR 辨識 文件四角 (票據、身分證、書頁) 保持文字比例正確,避免字體拉伸 掃描文件、票據辨識、證件 OCR
場景校正 把場景中的矩形物件校正成正視角,方便顯示或分析 投影幕、看板、地板方格的四角 幾何對齊即可,比例不一定要符合真實物件 投影幕校正、AR 虛擬投影、場景重建

🧾 小結

  • 文件校正:強調「文字比例正確」,目的是讓文件可讀性和 OCR 辨識效果更好。
  • 場景校正:強調「幾何對齊」,目的是讓場景顯示或分析更方便。
  • 技術上都是用 cv2.getPerspectiveTransform() + cv2.warpPerspective(),差別在 角點選取方式輸出大小設定

⚠️ 注意事項

  • 四個角點座標必須正確,否則校正結果會失真。
  • 建議搭配 特徵點偵測邊緣檢測 自動取得角點。
  • 輸出大小需根據目標矩形設定,否則可能造成拉伸。

📊 應用場景

  • 文件掃描校正:將拍攝的傾斜文件校正成正矩形,方便 OCR 辨識。
  • 投影幕校正:修正投影畫面傾斜,讓顯示內容保持比例。
  • 場景重建:將相機拍攝的斜角場景轉換成俯視視角。
  • AR 應用:將虛擬物件正確投影到真實場景中。

🎯 結語

本篇我們學會了 透視變換與圖片校正,能將傾斜或變形的圖片轉換成正常視角。
這些技巧在 文件掃描、投影校正、場景重建、AR 等領域非常常見。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials