この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
初めてのopencv3 [2017/10/21] adash333 作成 |
初めてのopencv3 [2018/10/07] (現在) |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
Chainerで自前の画像データで機械学習を行う場合、 | Chainerで自前の画像データで機械学習を行う場合、 | ||
- | (1)画像を収集して分類して保存(なるべくjpgファイルで収集) | + | - 画像を収集して分類して保存(なるべくjpgファイルで収集) |
- | (2)画像をグレースケール化(カラーのままのこともある) | + | - 画像をグレースケール化(カラーのままのこともある) |
- | (3)画像をリサイズ | + | - 画像をリサイズ |
- | (4)chainerの、tuple_datasetで使用できる形に変換 | + | - chainerの、tuple_datasetで使用できる形に変換 |
などの操作が必要であり、その過程が私のような初心者には難しい。 | などの操作が必要であり、その過程が私のような初心者には難しい。 | ||
- | 画像のリサイズなどは、OpenCV3というモジュールで行うと、比較的簡単にできるらしいので、OpenCV3について学んでいきたいと思います。 | + | 画像のリサイズなどは、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で、 | ||
+ | <code> | ||
+ | conda install -c https://conda.anaconda.org/menpo opencv3 | ||
+ | </code> | ||
+ | で、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:高さ)を返します。 | ||
+ | |||
+ | <code> | ||
+ | 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’) | ||
+ | |||
+ | </code> | ||
+ | |||
+ | cv2(OpenCV)の場合\\ | ||
+ | cv2.imreadで画像を読み込む。このとき画像はBGRになっている。\\ | ||
+ | OpenCVで読み込んだ画像のタイプはnumpy arrayになっているため、画像の縦横を調べるときは、Numpyのshapeメソッドを用いる。 | ||
+ | |||
+ | <code> | ||
+ | %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) | ||
+ | </code> | ||
+ | |||
+ | Numpyのnp.array.shapeは、行列の行(height:縦に並んだ要素の個数)と列(width:横に並んだ要素の個数)を返します。 | ||
+ | |||
+ | <code> | ||
+ | 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) | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | <wrap hi> | ||
+ | sizeとshapeで、widthとheightの順番が逆になりますので、注意が必要です。 | ||
+ | </wrap> | ||
+ | |||
+ | PILとNumpyの組み合わせ\\ | ||
+ | 以下は、NumPy配列の扱いとなります。 | ||
+ | <code> | ||
+ | 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) | ||
+ | |||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | 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で画像をインライン表示する場合は、 | ||
+ | <code> | ||
+ | %matplotlib inline | ||
+ | import matplotlib.pyplot as plt | ||
+ | </code> | ||
+ | として、利用します。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 | ||
+ | ===== リンク ===== | ||