Python OpenCV 基礎 #1

株式会社リュディアです。今回から OpenCV の基礎をまとめていきます。

今回は OpenCVを使って画像にアフィン変換を行ってみます。OpenCV は人それぞれで環境が異なると思うのでインストールが必要な方は事前にインストールを行ってください。

OpenCV については以下の Wikipedia のページを参考にしてください。

画像データとしては以下のものを使います。私が白い机の上に置いた封筒を 撮影したものです。封筒の向きがわかるように数字の 4 をマークとして置いています。この画像データのファイル名は envelope1.jpg です。

画像1

では最初に画像データを読み込むところまでの共通コードを以下に示します。

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種があり以下の図のようになります。

画像2

= 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つの状態を定義可能です。少し細かいですが各状態の間の関係を示しておきます。

画像3

今回は OpenCV の flip rotate についてまとめてました。

OpenCV 基礎 に関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?