【Python】画像の透視変換|OpenCVによる遠近感ある立体画像を出力する処理方法解説

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ
  • Pythonによる画像処理に興味がある。
  • OpenCVの透視変換を適用し「遠近感のある画像」を出力したい。
目次

OpenCVとは

OpenCV(Open Source Computer Vision Library)とは、画像処理やコンピュータビジョンの分野で広く活用されているオープンソースライブラリです。画像データの数値処理に強いのが特徴であり、高度な統計アルゴリズムも多数含まれていることから、近年機械学習の分野でも広く利用されています。

透視変換とは

透視変換とは、遠近感ある三次元の空間図形を二次元平面に投影する手法です。遠方にある図形は小さくなる遠近法で描写され、奥行きのある空間が二次元平面上に表現されるようになります。

【Python×OpenCV】透視変換を適用した3次元立体画像の出力

PythonのOpenCVライブラリを用いて透視変換を適用する方法について解説します。

画像読込部分に透視変換を適用したい画像のディレクトリを設定し、コードを実行してみましょう。

import cv2
import numpy as np

# 画像読込
img = cv2.imread("image_data.jpg")

# 画像サイズ
height = img.shape[0]  # 高さ
width  = img.shape[1]  # 幅

# 視点を設定
potision_bfr = np.float32([[100,600],[200,600],[300,150],[100,100]]) # オリジナル
potision_aft = np.float32([[100,600],[200,600],[250,250],[150,200]]) # 変換後

# 透視変換の行列
psp_matrix = cv2.getPerspectiveTransform(potision_bfr,   # オリジナル
                                         potision_aft,   # 変換後
                                        )

# 透視変換
psp_img = cv2.warpPerspective(img,            # 入力画像
                              psp_matrix,     # 変換行列
                              (width,height)  # 解像度
                             )

# 画像表示
cv2.imshow("img",psp_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

透視変換では、視点位置の変換前後の対応関係を定義することで、多様な遠近感ある空間図形を出力できるようになります。

【参考】Python・OpenCVを用いた画像処理

当サイトでは、PythonのOpenCVライブラリを用いた画像処理ノウハウを多数公開しています。

用途【Python×OpenCV】記事名
画像変換画像のリサイズ・拡大・縮小
画像変換画像の回転・反転・平行移動|アフィン変換
画像変換画像の明るさ調節|ガンマ補正
画像変換グレースケール・HSV・L*a*b|色空間の変換
画像変換モノクロ(白黒)画像変換|2値化処理
画像変換ヒストグラムの描画・ヒストグラム均一化処理
画像変換画像上にテキスト・図形(直線・長方形・円)を描画
画像変換画像の透視変換・遠近法
画像変換画像のノイズ除去・平滑化
画像変換画像の畳み込み(空間フィルタリング)
特徴抽出エッジの検出方法

画像認識や物体検出を学ぶ上でおすすめの教材はこちらをご参考ください。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次