
OpenCV
OpenCV(Open Source Computer Vision Library)は、インテルによって開発されたコンピュータビジョンのライブラリです。
Pythonで簡単に使えるほか、C++、Jave、MATLABなど各種言語用のバインディングが利用可能です。OpenCVはありとあらゆる画像操作の要素技術の集合体なので、頭に思い浮かぶ何ら頭の画像変換はまず実装されているでしょう、と言って過言でないくらい多機能です。公式ページはこちら[1]。
[1] OpenCV
https://opencv.org/
インストール
Pythonの標準ライブラリではないので利用にはインストールが必要です。pipを利用して簡単にインストールすることができます。また、依存関係にあるライブラリとして、数値計算ライブラリであるNumpyも必要です。自分の環境ではAnacondaを使っているのでNumpyは既に利用可能でした。
pip install opencv-python
ワープ変換
ワープ変換は線形変換/射影変換の一種で、画像を比較的自由に歪ませることができます。これは単純な移動・拡大・回転の操作ではできない変換で、歪ませられるということは逆に、歪みを取れることもできます。カメラを利用した紙書類の電子化など、内部でOpenCVが使われているかは分かりませんが、この種の歪み除去技術は活用されているはずです。
コード
ワープ変換には、変換の基準となる4点を、変換前と変換後とで2組用意する必要があります。基準点の組から変換行列をgetPerspectiveTransformによって得て、それをwarpPerspectiveに渡す流れです。warpPerspectiveには画像データと変換後の画像サイズも渡します。
以下、全コードです。
import cv2
import numpy as np
img_target = cv2.imread('original.png')
pnt_from = np.float32([[62,35], [500,30], [46,316], [497,332]])
pnt_to = np.float32([[0,0], [550,0], [0,367], [550,367]])
matrix_warp = cv2.getPerspectiveTransform(pnt_from, pnt_to)
dim_target = (550, 367)
output = cv2.warpPerspective(img_target, matrix_warp, dim_target)
cv2.imwrite('warp.png', output)
まとめと応用
・コンピュータビジョン用ライブラリOpenCVはPythonから簡単に使える。
・様々な画像変換を簡易に行うことができる。
これを応用して、
・OCRや3DCG用テクスチャなどをカメラ画像から得ることができる。
・スキャン画像の傾きや歪みを除去してきれいなドキュメントを得ることができる。