===== 初めてのOpenCV3 ===== Chainerで自前の画像データで機械学習を行う場合、 - 画像を収集して分類して保存(なるべくjpgファイルで収集) - 画像をグレースケール化(カラーのままのこともある) - 画像をリサイズ - chainerの、tuple_datasetで使用できる形に変換 などの操作が必要であり、その過程が私のような初心者には難しい。 画像のリサイズなどは、OpenCV3というモジュールで行うと、比較的簡単にできるらしいので、OpenCV3(with Python)について学んでいきたいと思います。 ==== 開発環境 ==== Windows8.1\\ Python 3.5\\ Anaconda 4.4.0 (64-bit)\\ Chainer 2.0\\ ===== OpenCV3をWindows8.1にインストール ===== 2017/8月時点で、Python3.5であれば、Anaconda Promptで、 conda install -c https://conda.anaconda.org/menpo opencv3 で、OpenCV3をインストール可能です。 python3.6の場合については、[[WindowsにOpenCV3をインストール]]をご覧ください。 ===== インストール後にOpenCV3を試してみる ===== (作成中) 初めてのOpenCV_with_Python\\ http://twosquirrel.mints.ne.jp/?p=20039 をご覧ください。 ==== Image.sizeとnp.array.shape ==== PILのImage.sizeは、画像の横幅(width:幅)と縦幅(height:高さ)を返します。 from PIL import Image import numpy as np # 画像の読み込み img = Image.open('cat.jpg') # 画像の幅と高さを取得 width, height = img.size print(img.size) print(width) print(height) # 元の画像と同じサイズのImageオブジェクトを作成する img2 = Image.new('RGB', (width, height)) # img2をcat2.jpgという名前で保存する img2.save(‘cat2.jpg’) cv2(OpenCV)の場合\\ cv2.imreadで画像を読み込む。このとき画像はBGRになっている。\\ OpenCVで読み込んだ画像のタイプはnumpy arrayになっているため、画像の縦横を調べるときは、Numpyのshapeメソッドを用いる。 %matplotlib inline import cv2 import matplotlib.pyplot as plt img = cv2.imread(‘cat.jpg’) print(img.shape) # OpenCVの画像はデフォルトだとBGR画像であるため、 # matplotlib(こちらはRGB画像)で正しく表示するためには色変換が必要 # 具体的には、cv2.cvtColor()関数を用いる cvimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(cvimg) Numpyのnp.array.shapeは、行列の行(height:縦に並んだ要素の個数)と列(width:横に並んだ要素の個数)を返します。 import numpy as np a = np.arange(60).reshape(10, 6) # 配列の形 a.shape # 要素数 a.size # 行数、列数の取り出し # 画像をNumpy配列に変換したときは、以下を # height, width = a.shape # と書くことがある nrow, ncol = a.shape print(nrow) print(ncol) sizeとshapeで、widthとheightの順番が逆になりますので、注意が必要です。 PILとNumpyの組み合わせ\\ 以下は、NumPy配列の扱いとなります。 from PIL import Image import numpy as np # グレースケール画像にしてからNumpy配列に変換 im = np.array(Image.open('img.jpg').convert('L')) print(im.shape) print(im.dtype) print(im) # カラー画像のままNumpy配列に変換 im = np.array(Image.open('img.jpg')) print(im.shape) print(im.dtype) print(im) Chainer用の画像処理メモ(4)pythonでの画像の操作 "from PIL import Image"\\ http://twosquirrel.mints.ne.jp/?p=20135 Chainer用の画像処理メモ(5)初めてのNumPy"import numpy as np"\\ http://twosquirrel.mints.ne.jp/?p=20153 [OpenCV Python]画像の幅、高さ、チャンネル数、depth取得 atinfinity edited this page on 27 Jul 2016\\ https://github.com/atinfinity/lab/wiki/%5BOpenCV-Python%5D画像の幅、高さ、チャンネル数、depth取得 PythonとOpenCVで画像処理②【ウィンドウ、画像のサイズ変更】 \\ http://rasp.hateblo.jp/entry/2016/01/22/230852 Python – NumPyで画像を配列として取得する\\ https://endoyuta.com/2015/09/27/python-numpyで画像を配列として取得する/ 初めてのPython画像処理\\ https://qiita.com/uosansatox/items/4fa34e1d8d95d8783536 2017-02-16 — Tag: Python / Pillow / Image Python, Pillowを使って画像を一括でリサイズ(拡大・縮小)する方法\\ https://www.outoutput.com/programming/python-pil-pillow-image-resize/ 2017-01-25 — Tag: Python Pythonでファイル名の前後に文字列や連番を加えて一括で変更\\ https://www.outoutput.com/programming/python-os-rename-glob-format-basename-splitext/ ===== 参考文献 ===== Pyconjp 2014 OpenCVのpythonインターフェース入門\\ Masaki Hayashi,Published on Sep 28, 2014\\ https://www.slideshare.net/payashim/pyconjp-2014-opencv\\ →わかりやすいです。コードがPython2, OpenCV2なので、一部動かないことがありそうなので、Python3, OpenCV3のコードに少しだけ変換したものを、上記リンクに記載しました。 jupyter notebookでOpenCV 3.1を動かす(2) データ解析 2017/05/07\\ http://takacity.blog.fc2.com/blog-entry-142.html →jupyter notebookでcv2で画像をインライン表示する場合は、 %matplotlib inline import matplotlib.pyplot as plt として、利用します。RGBとBGRに注意しながら、コードを記載します。 OpenCVで画像の読み込みと表示、保存20160216\\ http://rabbitfoot141.hatenablog.com/entry/2016/02/06/123859 ===== pillowについてのリンク ===== OpenCVはインストールがややこしいことがあります。pillowという、あらかじめAnacondaに入っているモジュールも、OpenCVと似たような画像処理を行うことができます。 PIL/Pillow チートシート 20170307 \\ https://qiita.com/pashango2/items/145d858eff3c505c100a 2017-02-16 — Tag: Python / Pillow / Image Python, Pillowを使って画像を一括でリサイズ(拡大・縮小)する方法\\ https://www.outoutput.com/programming/python-pil-pillow-image-resize/ http://pc.atsuhiro-me.net/entry/2015/04/30/215643?amp=1 ===== リンク =====