Python OpenCV 基礎 #1
株式会社リュディアです。今回から OpenCV の基礎をまとめていきます。
今回は OpenCVを使って画像にアフィン変換を行ってみます。OpenCV は人それぞれで環境が異なると思うのでインストールが必要な方は事前にインストールを行ってください。
OpenCV については以下の Wikipedia のページを参考にしてください。
画像データとしては以下のものを使います。私が白い机の上に置いた封筒を 撮影したものです。封筒の向きがわかるように数字の 4 をマークとして置いています。この画像データのファイル名は envelope1.jpg です。
では最初に画像データを読み込むところまでの共通コードを以下に示します。
import cv2
filebase = 'envelope1'
path = filebase + '.jpg'
image = cv2.imread(path, 1)
rows, cols = image.shape[:2]
Python で OpenCV を使うには cv2 を import する必要があります。今回は JPEG ファイルを読み込みます。読み込みには imread を使います。imread の第1引数はファイルパスなのですが、第2引数は読み込み方法を指定する Flag で以下の意味を持ちます。
> 0 : 強制的に3チャンネルカラー画像として読み込む
= 0 : 強制的にグレースケール画像として読み込む
< 0 : そのままの画像として読み込む
今回は 1 を指定して 3チャネルカラー画像として読み込むように指示しています。ここまでで入力画像の読み込みはできました。
初回となる今回は flip = ひっくり返すと rotate = 回転の処理です。まず flip からまとめていきましょう。OpenCV の flip 関数は以下のようになっています。
cv2.flip(image, flip_code)
flip の第2引数 flip_code は > 0, 0, < 0 の3種があり以下の図のようになります。
= 0 : 上下反転 = X軸反転
> 0 : 左右反転 = Y軸反転
< 0 : 上下反転 + 左右反転 = 180度回転
flip_code = 0 のときのプログラム全体を以下につけておきます。
import cv2
filebase = 'envelope1'
path = filebase + '.jpg'
image = cv2.imread(path, 1)
rows, cols = image.shape[:2]
print(rows, cols)
out_image = cv2.flip(image, 0)
cv2.imwrite('out_' + filebase + '.jpg', out_image)
flip に続いて rotate についてもまとめてみます。rotate は名前の通り回転を行う関数で時計周りに90度、反時計周りに90度、180度回転はそれぞれ以下のように指定します。
cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.rotate(image, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.rotate(image, cv2.ROTATE_180)
flip と rotate を組み合わせると以下の 8つの状態を定義可能です。少し細かいですが各状態の間の関係を示しておきます。
今回は OpenCV の flip と rotate についてまとめてました。
OpenCV 基礎 に関するまとめの続きは以下からどうぞ。
では、ごきげんよう。