ユーザ用ツール

サイト用ツール


サイドバー

目次

機械学習とは

プログラミング無しで機械学習

機械学習プログラミング入門

初めてのKeras2.0

初めてのTensorflow(YouTube)

初めてのChainer2.0

初めてのビットコイン

ビットコイン用語集

初めてのSolidityプログラミング

初めての医療統計

初めてのエクセルで医療統計

初めてのEZRで医療統計

初めてのRStudioでレポート作成

スマホアプリ作成ソフトIonic3

スマホアプリ作成ソフトIonic4

Ionicのためのjavascript tips

その他

NiftyCloudMobileBackend

税金など

Dokuwiki

初めてのopencv3

初めてのOpenCV3

Chainerで自前の画像データで機械学習を行う場合、

  1. 画像を収集して分類して保存(なるべくjpgファイルで収集)
  2. 画像をグレースケール化(カラーのままのこともある)
  3. 画像をリサイズ
  4. 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

リンク

初めてのopencv3.txt · 最終更新: 2018/10/07 (外部編集)