
まくまく
プラグラミング言語「PYTHON」を使ってみよう!!業務自動化・効率化の実例を踏まえ、解説できればと思っています。対象は、プログラムを学び始めた初心者向けとなります。今回は傾いて撮影された画像を正面から見た画像に変換してみようと思います。
使用するのはopenCV
使用するのは、画像処理ライブラリのopenCVです。ここではopenCVがインストールされているのを前提として書き進めていきます。
サンプルコード
#ライブラリのインポート
import cv2
import numpy as np
#画像の読み込み
img = cv2.imread('card.jpg')
#座標入力
#pts1はカードの4辺、pts2は変換後の座標
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点入力します。pts1のところです。
カードの角の座標は、前回の記事「画像をクリックして座標を取得する方法」または、Matplotlibでも座標取得できます。いずれかの方法で予め取得しておく必要があります。
pts2のところには、変換後の座標を入力します。今回はカードの寸法が85mm x 54mmだったので、それに合わせました。アスペクト比さえ合っていればOKです。
処理後
処理後はこちら。傾きが補正されました。青い囲いが若干斜めになっていますが、許容範囲ですね。