ITいろいろ

プログラミングやクラウド、データ解析など、ITにかかわることをいろいろと書いています。

OpenCVでの画像のリサイズとpyplotで複数画像を表示

今回はOpenCVで画像をリサイズしてみます。 そして、今まではOpenCVの画像出力cv2.imshowを使っていたのですが、pyplotを使って複数の画像を一度に表示する方法も記述します。

コード紹介

# matplotlibのインストール(初回のみ)
!pip install matplotlib

# インポート
import cv2
import matplotlib.pyplot as plt

# 画像ファイルの読み込み
img = cv2.imread("Lenna.jpg")

# サイズを取得
height,width,color = img.shape

# リサイズ(指定した値でリサイズ)
img_resize1 = cv2.resize(img, dsize=(300, 100)) #dsize=は省略可

# リサイズ(倍率でリサイズ)
img_resize2 = cv2.resize(img, dsize=None, fx=0.5, fy=0.5)


# 左右3分割で左側に元画像を表示
plt.subplot(1, 3, 1)
plt.imshow(cv2.cvtColor(img_resize1,cv2.COLOR_BGR2RGB))

# 2番目にimg_resize1を表示
plt.subplot(1, 3, 2)
plt.imshow(cv2.cvtColor(img_resize2,cv2.COLOR_BGR2RGB))

# 3番目にimg_resize2を表示
plt.subplot(1, 3, 3)
plt.imshow(cv2.cvtColor(img_resize2,cv2.COLOR_BGR2RGB))

出力結果

少し解説

リサイズcv2.resizeについて

あまり説明することはないですが、dsizeパラメータは値の指定、fx, fyは倍率を指定できます。

dsizeは必須ですので、倍率で指定するときはdsize=Noneを忘れないようにつけましょう。

pyplotについて

plt.imshow関数で画像を表示することができます。

imshowの前にplt.subplotを設定することで複数画像を表示することができます。

plt.subplot(1, 3, 2)とすると、縦1行、横3列の枠の中で2番目に表示する、という意味になります。

注意点:OpenCVはBGR、PyplotはRGB

画像を表示するときに python plt.imshow(img) とやりたくなるのですが、そうするとレナさんの顔色が悪くなります。。

これは扱う配列の順番がOpenCVは[青、緑、赤]に対し、pyplotは[赤、緑、青]になるからです。

このため、コード紹介にあるように変換をしてから表示するようにする必要があります。