Python OpenCV3で透視変換

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

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

 

前提

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

&nbsp

今回行う変換

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

persipective

 

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

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

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

 

元画像

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

hanabi

 

透視変換

実際に透視変換を行う。
sourceディレクトリに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()

実行してみる。

(opencv_python)$ python persipective.py

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

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

 

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

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です