Python OpenCV / 傾いて撮影された画像を修正する方法。射影変換

プラグラミング言語「PYTHON」を使ってみよう!!

業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。

今回の内容

  • 傾いて撮影された画像を正面から見た画像に変換



使用するのはopenCV

使用するのは、画像処理ライブラリのopenCVです。ここではopenCVがインストールされているのを前提として書き進めていきます。

サンプルコード

import cv2
import numpy as np

img = cv2.imread('card.jpg')

pts1 = np.float32([[409,570], [1332,370], [577, 1053], [1611, 782]])
pts2 = np.float32([[0,0], [850,0], [0,540], [850,540]])

M = cv2.getPerspectiveTransform(pts1, pts2)
dst = cv2.warpPerspective(img, M, (850, 540))

cv2.imwrite("card_result.jpg", dst)

処理の流れ


まずは元になる画像を読み込みます。今回は、斜めから撮影されたヨドバシカードの写真を使用します。

まずは、このカードの角の座標を4点入力します。(6行目)

カードの角の座標は、前回の記事「画像をクリックして座標を取得する方法」または、Matplotlibでも座標取得できます。いずれかの方法で予め取得しておく必要があります。

7行目は、変換後の座標を入力します。今回はカードの寸法が85mm x 54mmだったので、それに合わせました。アスペクト比さえ合っていればOKです。

9行目、10行目で射影変換をして、画像を正面から見たように変換します。

処理後


処理後はこちら。傾きが補正されました。青い囲いが若干斜めになっていますが、許容範囲ですね。



タイトルとURLをコピーしました