Python 備忘録

Python-ver: 3.6.3

Pythonで画像処理① 表示とグレースケール変換

OpenCvのインストール

今日はPythonで画像処理のほうに進んでいこうと思います。

その前にOpenCvという画像処理用のライブラリをインストールします。

OpenCvとは・・・

コンピュータで画像や動画を処理するのに必要なモジュールが搭載されたライブラリです。当初はインテル社が開発して、それをWillow Garageに引き継がれた後、Itseezが現在では開発を手掛けているそうです。

ライブラリをインストールしてばかりですが、Pythonにはものすごく多くのライブラリが用意されていますね。
そこが魅力でもあります。

まあインストールは簡単でした。いつもの通り、仮想環境をactivateで利用可能状態にして、

pip install opencv-python

と打ち込むだけ。

そのあと、pythonと打って、インタラクティブシェルを動かします。
インタラクティブシェルでimport cv2と打ってエンターを押して、何もエラーが表示されなければインストール完了です。

画像表示

ここらでただ単に画像を表示してみましょう。
いきなり画像認識に入っても全然わからないので。。。

こちらの画像を表示させてみたいと思います。

f:id:sh0122:20171015140811j:plain

画像はこちらから持ってきました。
無料の写真: フィールド, 離れた, 夏, 空, 雲, 車線, 風景 - Pixabayの無料画像 - 175959

まずは、defaultの直下にimagesフォルダを作ります。その中に名前をfield.jpgとして、画像を保存します。
そして、srcの中でpicture.pyを作成。名前は何でもよいですが。

import cv2, matplotlib
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('../images/field.jpg')

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(img)
plt.show()

picture.pyの中身はこんな感じ。これを動かしてみると、

f:id:sh0122:20171015142015p:plain
こんな感じのウィンドウが出てくる。

画像パスはsrcフォルダ、つまり、ソースコードがある場所を指しているようです。

ポイントはimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)です。
img = cv2.imread('../images/field.jpg')で画像を読み込んだ段階では、imgにはnumpy配列でRGB値が格納されています。

ためしに、イメージを読み込んだ後にprint(img)としてみると、

[[[174 153 138]
[171 150 135]
[167 148 133]
...,
[142 99 50]
[144 98 50]
[144 98 50]]

[[176 155 140]
[174 153 138]
[172 153 138]
...,
[143 100 51]
[142 99 50]
[142 99 50]]

[[175 156 141]
[174 155 140]
[175 156 141]
...,
[144 100 53]
[142 99 50]
[141 98 49]]

...,
[[ 8 37 28]
[ 0 20 9]
[ 0 33 19]
...,
[ 21 77 82]
[ 14 72 71]
[ 11 71 65]]

[[ 2 27 17]
[ 0 21 10]
[ 5 35 22]
...,
[ 37 92 97]
[ 40 97 96]
[ 12 70 65]]

[[ 0 16 7]
[ 0 16 6]
[ 7 33 20]
...,
[ 41 93 99]
[ 54 108 108]
[ 47 103 98]]]

こんなのが、出てきます。これがRGB値なのですが、img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)でRGBに変換しているわけですね。
それをplt.imgshow(img) plt.show()で表示させています。

ためしに、img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)の部分をコメントアウトするか、削除するかして実行してみてください。
凄い色合いの画像が表示されるはずです。

グレースケール変換

表示させるだけでは面白くないので、グレースケールに変換してみましょう。
といっても、グレースケール変換した画像をsrcフォルダに落とすだけの簡単なコードです。

import cv2, matplotlib
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('../images/field.jpg')

img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

cv2.imwrite('gray.jpg', img)

このプログラムを実行するとgray.jpgという画像ファイルがsrcフォルダの中に作られます。
f:id:sh0122:20171015144230j:plain
こんな感じ。

今日はこれぐらいで終わります。
次は、画像の矩形を割り出すなど画像認識の初歩をやっていきたいと思います。