【Python】画像リサイズ・拡大・縮小方法|OpenCV活用の画像処理入門

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

こんな方におすすめ
  • Pythonによる画像処理に興味がある。
  • 画像データをリサイズ・圧縮する方法が知りたい。
目次

OpenCVとは

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

【Python】OpenCV|画像のリサイズ

PythonのOpenCVライブラリを用いて画像をリサイズする方法について解説します。

画像データの準備

はじめに、リサイズしたい画像データを準備してPythonのOpenCVでデータ読込確認するところから始めてみましょう。次のようにコードを記述します。

読み込む画像を選択部分の読込画像のディレクトリを修正した上で実行してみましょう。

import cv2

# 読み込む画像を選択
img = cv2.imread("image_data.jpg")

# リサイズ前の画像サイズ出力
print("(高さ, 幅, 色)="+str(img.shape))

# オリジナル画像を表示
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像をリサイズする

画像リサイズはcv2.resize()メソッドをもとに実行できます。次のように記載しましょう。

import cv2

# 読み込む画像を選択
img = cv2.imread("image_data.jpg")

# サイズ設定|cv2では(幅、高さ)の順で数値を設定
size = (600,400)

# リサイズ
img_resize = cv2.resize(img,   # 画像データを指定
                        size   # リサイズ後のサイズを指定
                       )

# リサイズ後の画像サイズ出力
print("(高さ, 幅, 色)="+str(img_resize.shape))

# リサイズ後を表示
cv2.imshow("resize",img_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.resize()メソッドでは、第一引数に画像データを指定し、第二引数にリサイズ後のサイズ(幅, 高さ)を指定します。

【Python】OpenCV|画像の拡大・縮小

画像データを拡大・縮小する方法を解説します。

画像データの拡大・縮小を実行する場合、画素の補間という画像処理が行われます。画素の補間とは、隣接する画素間の画素値を数値計算により導出することで、画像の拡大・縮小を可能にする画像処理法を指します。画素の補間により、画像を拡大・縮小しても滑らかな画像を生成することができるようになります。

画像データの拡大・縮小もcv2.resize()メソッドをもとに実行できます。その際、画素の補間に伴う計算手法としてinterpolationという引数を追記するのがポイントです。

以下interpolationにて指定できる補間方法を示します。

画素の補間概要
INTER_LINEAR・バイリニア補間
・2×2画素(4画素)を用いて輝度値を算出
INTER_AREA・ピクセルエリアの関係に基づくリサンプリング手法
・画像を縮小した際に発生するモアレ対策に有効
INTER_CUBIC・バイキュービック補間
・4×4画素(16画素)を用いて輝度値を算出
INTER_NEAREST・最近傍補間
・最も近い位置にある画素を用いて輝度値を算出
INTER_LANCZOS4・Lanczos法での補間
・8×8画素(64画像)を用いて輝度値を算出

以下、いくつか画像データの拡大・縮小コード例を示します。

画像の拡大・縮小|INTER_AREA

import cv2

# 読み込む画像を選択
img = cv2.imread("image_data.jpg")

# サイズ設定|cv2では(幅、高さ)の順で数値を設定
size = (300,200) 

# 画像拡大・縮小
img_inter_area  = cv2.resize(img,size,interpolation = cv2.INTER_AREA) 

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

画像の拡大・縮小|INTER_LINEAR

import cv2

# 読み込む画像を選択
img = cv2.imread("image_data.jpg")

# サイズ設定|cv2では(幅、高さ)の順で数値を設定
size = (300,200) 

# 画像圧縮
img_inter_linear = cv2.resize(img,size,interpolation = cv2.INTER_LINEAR)

# 画像表示
cv2.imshow("linear",img_inter_linear)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

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

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

最後に

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

本記事をシェア!
目次