42
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Colaboratoryで画像処理(初級編)

Posted at

Google Colaboratory上で画像処理を試す方法の紹介。Jupyter NotebookあるいはGoogle Colaboratoryを触ったことがある人向け。

Google Colaboratoryで画像処理を試すメリット

  • 環境構築の必要がない。ブラウザがあればいつでもどこからでも試せる。iPadからでも!
  • REPL形式で、途中の状態を確認したり書き換えたりしながら作業できる
  • Pythonで書くので、APIサーバーなどの形に移植しやすい

そして、何より無料で使える。

新しいNotebookの作成

Screen Shot 2019-01-06 at 10.48.52.png

「NEW PYTHON 3 NOTEBOOK」を選ぶ。Python 2系はまもなくサポートが終了してしまうので、特別な理由がなければPython 3系を選ぶ。

画像をアップロードして表示する

処理したいファイルをアップロードする。Google Driveから読み込ませることもできるが、枚数が少ない、あるいは確認用に色々な画像を使いたい場合はfiles.upload()を使ってブラウザからアップロードするのが便利。

from google.colab import files
uploaded_file = files.upload()
Screen Shot 2019-01-06 at 10.55.25.png

コードブロックを実行すると、アップロードフォームが表示される。適当な画像を選んでアップロードする。

files.upload()の返り値には、アップロードしたファイルの情報が含まれるDictionaryが入っている。キーがファイル名になっているので、アップロードされたファイルのファイル名はnext(iter(uploaded_file))で取得できる。

uploaded_file_name = next(iter(uploaded_file))
print(uploaded_file_name)

「CODE」ブロックを追加して、アップロードしたファイル名を確認してみる。

Screen Shot 2019-01-06 at 11.02.43.png

OpenCVを使って画像を読み込む。OpenCVでは画像は色が(現在では)一般的なRGBではなくBGRで扱われる。それだと後々不便なので、cvtColorを使ってRGBに変換しておく。

import cv2

orig = cv2.imread(uploaded_file_name)
src = cv2.cvtColor(orig, cv2.COLOR_BGR2RGB)

読み込んだ画像をmatplotlibを使って画面に表示する。画像はぱくたそから拝借。

from matplotlib import pyplot as plt

plt.imshow(src)
Screen Shot 2019-01-06 at 11.20.29.png

デフォルトの状態では、グリッドが表示される。グリッドを表示したくない場合は、plt.axis('off')を指定して非表示にできる。

OpenCVの機能で加工してみる

blurred = cv2.blur(src, (20, 20))
plt.imshow(blurred)

blurを使って、画像にブラーをかけてみる。

Screen Shot 2019-01-06 at 11.24.51.png

上のコードではブラーのサイズを20 x 20にしたが、違う値で試してみよう。

Screen Shot 2019-01-06 at 11.26.10.png

ブラーのサイズを100 x 100に変更して、左側の「Run Cell」ボタンを押して実行し直してみた。このように、処理の途中でパラメータを変更して再実行、すぐに実行結果を確認できるのはREPLならでは。これは便利。

OpenCVのドキュメントはここ

NumPyを使って画像処理をする

NumPyを使って、ピクセルを直接操作して画像処理してみる。NumPyを使っておくと、あとあと機械学習系のライブラリ(Tensorflowとか)を使って処理をしたくなった時に便利なので、ちょっと試しておこう。

import numpy as np

pixels = np.array(src)
pixels = 255 - pixels
plt.imshow(pixels)

PythonのOpenCVは内部的にNumPyのndarrayを使っているらしいので、読み込んだデータをそのままnp.array()の引数に渡せばピクセルデータのndarrayを生成できる。

NumPy自体の使い方については省略するが、ここでは全てのピクセルのRGB値それぞれに対して255から引くことで色を反転させている。

処理結果はそのままplt.imshowで表示できるから便利だ。

Screen Shot 2019-01-06 at 11.42.14.png

OpenCVで読み込んだ元データは24bit(uint8 * RGBの3チャンネル)、各チャンネルはuint8になっている。uint8では加工すると精度が落ちてしまうので、floatに変換する。

pixels = np.array(src, dtype = 'float32')

表示のタイミングでuint8の配列に戻してやることを忘れずに。

plt.imshow(pixels.astype('uint8'))
Screen Shot 2019-01-06 at 12.04.52.png

まとめ

ブラウザ上で、REPL環境で画像処理をできるというのは、実際に試してみるととても快適で良い。

42
50
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?