はじめに
この記事では、Jupyter上で画像を表示させる方法及び、引数やリストを変えて出力画像と対応している機能を理解しようとする記事です。
小職は機械学習初学者ですので、ご意見・間違いあればご指摘頂けると大変幸甚です。
要約
- 画像をインライン表示させる
- resizeモジュールを使ってモザイクをかける
- 透過率を上げる
画像をインライン表示させる
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('012.JPG') #読み込みたい任意の画像をpic.ipynbと同フォルダに入れておきましょう。
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(1,1,1)
ax.imshow(img)
ax.axis("off")
まずはベーシックに画像を表示させました。
ここで、(-0.5,719.5,719.5,-0.5)とは、左下の座標が(-0.5,719.5)で、右上の座標が(719.5, -0.5)であることを示しています。
画像の表示は数学で習うxy軸方向と異なっており、左上に原点が来ているので、下記のようになります。
画像のサイズを確認
img.shape
(720, 720, 3)
(縦解像度、横解像度、チャンネル数)を表しますので、720×720の3チャンネル(=RGBのカラー)ということが分かりますね。
注意ポイントとしては、これをxyで表すと(y、x、チャンネル数)となることです。
画像の座標及びその位置の画像を表示
img[0,0]
array([162, 127, 77], dtype=uint8)
原点位置(0,0)のRGB値は(162,127,77)であることが分かりました。さらに、表示を行うと以下のようになります。
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
ax.imshow(img[0:1,0:1])#表示し値座標を範囲で指定する
ax.axis("on")
(0,0)座標を表示したい場合でも、[0:1,0:1]のように範囲で指定しなければエラーが出てしまいますので、注意しましょう。
x、y座標に注意して表示する
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111)
ax.imshow(img[0:720,0:10])
ax.axis("on")
img[0:720,0:10]と指定すると、y:0~720、x:0~10で表示するため、縦長になります。x、y座標の頭があると逆になりますので、注意しましょう。下記画像では縦長画像になっていますね。
resizeモジュールを使ってモザイクをかける
img_re= cv2.resize(img, dsize=None, fx=0.1, fy =0.1)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(1,1,1)
ax.imshow(img_re)
ax.axis("off")
cv2.resize()モジュールにより画素数を1/10にすることで、モザイクをかけます。
resizeにおける引数で、fx及びfyがx,yの倍率になります。今回は0.1(=10%)とすることで、画素数を1/10にしました。
透過率を上げる
fig, ax = plt.subplots(facecolor="w")
ax.imshow(img, alpha=0.5)
plt.show()
imshowモジュールのalphaへの引数を0~1の範囲で指定して透過率を決めることで、薄い色合いへ変化させることができます。
終わりに
画像を取り扱って処理をしていこうと思うと、今回の操作は基本的なものです。自分自身で手を動かすことで実感を得ておくことが非常に大事だと思いました。
プログラム全文は下記に格納しています。
https://github.com/Fumio-eisan/jupyter_pic20200313