Python OpenCV 基礎 #2
株式会社リュディアです。引き続き OpenCVを使って画像に変換処理を行ってみます。OpenCV は人それぞれで環境が異なると思うのでインストールと環境設定までは各自で頑張ってください。
前回までの Python OpenCV 基礎のまとめへのリンクは以下を参考にしてください。
今回のまとめは前回の記事を読んでいただいていることを前提としていますので必ず事前に目を通してください。
今回はサイズの変更についてまとめます。resize を使います。OpenCV の resize 関数の基本的な使い方は以下の構文になります。
cv2.resize(image, (x方向の目標サイズ、y方向の目標サイズ))
基準となる画像を縦方向、横方向のそれぞれを2倍、1/2倍した状態を以下につけます。
横方向に2倍、縦方向に 1/2 倍する場合のコード例も以下につけておきます。簡単ですよね。
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)
xscale = 2.0
yscale = 1/2
out_image = cv2.resize(image, (int(cols * xscale), int(rows * yscale)))
cv2.imwrite('out_' + filebase + '.jpg', out_image)
ここで実際の拡大、縮小はどのように行われているか?ということを考えてみましょう。例えば 1/2 つまり半分にする場合にどのように半分にしているのでしょうか?2倍にする場合にはどのように2倍にしているのでしょうか? 以下は OpenCV についての記述をまとめているページなのですが詳細情報が記載されています。C言語をベースとして書かれていますが気にせず読んでみてください。
補間方法 = interpolation として以下の5 つを指定可能なようです。これらの補完方法に従って拡大縮小を行っているようですね。
INTER_NEAREST : 最近傍補間
INTER_LINEAR : バイリニア補間(デフォルト)
INTER_AREA : ピクセル領域の関係を利用したリサンプリング.画像を大幅に縮小する場合は,モアレを避けることができる良い手法です.しかし,画像を拡大する場合は, INTER_NEAREST メソッドと同様になります
INTER_CUBIC : 4x4 の近傍領域を利用するバイキュービック補間
INTER_LANCZOS4 : 8x8 の近傍領域を利用する Lanczos法の補間
指定をしない場合、つまりデフォルトでは INTER_LINEAR が選択されますし、多くの場合で問題ないと思います。補完方法を指定した場合のコード例を以下につけておきます。
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)
xscale = 2.0
yscale = 1/2
out_image = cv2.resize(image, (int(cols * xscale), int(rows * yscale)), cv2.INTER_NEAREST)
cv2.imwrite('out_' + filebase + '.jpg', out_image)
OpenCV 基礎 に関するまとめの続きは以下からどうぞ。
では、ごきげんよう。