Python OpenCV3で透視変換

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

透視変換とは、画像を3次元視点で見る変換のこと。
遠近法のような感じ。

[amazonjs asin=”4061538225″ locale=”JP” title=”OpenCVによる画像処理入門 (KS情報科学専門書)”]

 

前提

ディレクトリ構成などはこことかこことか。

&nbsp

今回行う変換

説明しきれるとはあまり思っていないので流し読みしていただけると幸い。
以下の画像のような変換を行う。

persipective

 

結論からいうと、緑色の部分が変換後に見える部分で、persipective1の緑色部分以外は黒く表示される。

どういうことかというと、プログラムではpersipective1とpersipective2の2つの四角形の座標を指定する。その上で、画像をpersipective2の形に変形し、変形後のpersipective1の枠内の部分のみを表示する。

実際にプログラムを実行してみるとなんとなくわかると思う。

 

元画像

線香花火の画像(hanabi.jpg)を使う。
以前の例だとsource/imageディレクトリ配下に設置する。

hanabi

 

透視変換

実際に透視変換を行う。
sourceディレクトリにpersipective.pyを作成する。

[python title=”persipective.pyの内容”] # -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == ‘__main__’:

# 画像読み込み
img_src = cv2.imread("./image/hanabi.jpg", 1)

# 画像サイズの取得(横, 縦)
size = tuple(np.array([img_src.shape[1], img_src.shape[0]]))

# 図のpersipective1の座標を指定
perspective1 = np.float32([[250, 500],
[750, 500],
[750, 250],
[250, 250]])

# 図のpersipective2の座標を指定
perspective2 = np.float32([[250, 750],
[750, 750],
[650, 500],
[350, 500]])

# 透視変換行列を生成
psp_matrix = cv2.getPerspectiveTransform(perspective1,perspective2)

# 透視変換を行い、出力
img_psp = cv2.warpPerspective(img_src, psp_matrix, size)

# 変換後の画像をimageディレクトリ配下に保存
cv2.imwrite("./image/hanabi_psp.jpg", img_psp)

# 表示
cv2.imshow("Show PERSPECTIVE TRANSFORM Image", img_psp)
cv2.waitKey(0)
cv2.destroyAllWindows()

[/python]

実行してみる。

[shell] (opencv_python)$ python persipective.py
[/shell]

以下の様な画像が表示される。

スクリーンショット 2015-06-26 1.21.15

 

persipective1やpersipective2の座標を色々変えてみると理解しやすいかも。

 

Related posts

コメントを残す