単一画像の表示 display(), cv2.imshow(), plt.imshow()

pythonで画像を表示する方法を紹介します。
開発環境はjupyter notebook、言語はpythonです。

まず下記サイトでjupyter notebookをインストールし、各モジュールをインストールしてください。
https://jupyter.org/

今回の画像・コード一式はgoogle driveにも保存しておりますので、必要に応じてお使いください。

今回作成したコード

#1:モジュールのインポート
import cv2
from IPython.display import Image, display
import matplotlib.pyplot as plt
%matplotlib inline

#2:displayによる表示
img1_path = "cutlet.jpg" 
display(Image(img1_path))

#3:opencvによる表示
img1 = cv2.imread(img1_path)
cv2.imshow('image.jpg',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

#4:matplotlibによる表示
img_r = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
fig = plt.figure(1, (12., 12.))
plt.imshow(img_r)

処理の解説

2.displayによる表示

img1_path = "cutlet.jpg" 
display(Image(img1_path))
img1_pathというのは表示したい画像のディレクトリ(保存場所)を示しています。
今回は上記のソースコードの保存ディレクトリと同じフォルダに保存している、cutlet.jpgという画像を相対パスで読み込んでいます。
ちなみにcutlet.jpgはこんな画像です。
cutlet.jpg

ここで引用符""をつけなければ、cutlet.jpgが変数として扱われてしまうので、文字列として認識されるよう、"cutlet.jpg"という形で記述しています。

また引用符"cutlet.jpg"を下記のような方法で記載することで、絶対パスに変更することもできます。
img1_path = "C:/Users/ユーザー名/Pictures/cutlet.jpg"
※パスの区切りには/を使うこと。また半角文字推奨

最終的にはImage()内にパスを書くことで画像を読み込み、display()で表示するという流れになります。
実行するとnotebook上に下記のように画像が表示されます。
display()による表示

3.opencvによる表示

img1_path = "cutlet.jpg" 
img1 = cv2.imread(img1_path)
cv2.imshow('image.jpg',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
まずcv2.imread()という関数に画像のパスを書き込んで、画像を読み込みます。
その後のcv2.imshow()、cv2.waitKey()、cv2.destoyAllWindows()は、画像の表示とウィンドウの消去のためのコマンドなのですが、全てが揃わないとエラーになるので、3つで1セットだと思ってください。

これを実行するとPC上に新しいウィンドウが表示され、0を押すことでウィンドウを消すことができます。
ウィンドウサイズが非常に大きく、縮小もできない(改善方法はありそうですが・・・)ためかなり不便です。
今回の画像ではもはやお茶しか表示されていません・・・

cv2.imshow()による表示

4.matplotlibによる表示

img1_path = "cutlet.jpg" 
img1 = cv2.imread(img1_path)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
fig = plt.figure(1, (12., 12.))
plt.imshow(img2)

matplotlibは本来グラフを表示するためのモジュールですが、画像を表示することも可能です。
opencvで読み込んだRGB画像はBGR(Blue, Green, Red)の順に並ぶため、cv2.cvtColor()という関数を用いて、並び順をRGBに変換しています。
BGR2RGBは、BGR to RGBという変換ということを意味しているのだと思います。

このプログラムを実行すると、下記のように画像が表示されます。
デフォルトでは、表示サイズが非常に小さいですが、縦軸、横軸が表示されているのが非常に便利です(今回はfig = plt.figure(1, (12., 12.))で少し表示サイズを大きくしています)。
matplotlibの細かな使い方も後々記事にしたいと思います。

matplotlibによる表示

以上よりpython、特にjupyter notebook上で、画像の表示が可能となりました。
これで今回のプログラミング紹介は終了です。

今回使用した画像:ソースカツどん/田村食堂

長野県は伊那市の名物だそうです。
地図を記載しているのでぜひ訪れてみてください。

コメント