とか、など

プログラミングとか、画像処理とか、機械学習を勉強しようとして挫折中

完全独習統計学入門がすごくわかりやすかった話

東京駅の丸善をウロウロしてたら、

 

python3 opencv3入門-モフォロジーやで

モフォロジーとかモルフォロジーとか言われるやつですね。

膨張・収縮・オープニング・クロージング 画像処理ソリューション

ざっとこの辺を見て勉強してください。

 

さて、コードですが、サイズを決めて、関数を呼ぶだけです

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('./images/lenna.jpg', 0)
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
#カーネル要するにどれだけ強くモフォロジーをかけるかということ
kernel = np.ones((5, 5), np.uint8)
#モフォロジー処理
elosion = cv2.erode(binary, kernel, iterations = 1)#収縮
dilation = cv2.dilate(binary, kernel, iterations = 1)#膨張
closing = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)#クロージング
opening = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)#オープニング

plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(binary, 'gray'), plt.title('BIN')
plt.subplot(233), plt.imshow(elosion, 'gray'), plt.title('ELODED')
plt.subplot(234), plt.imshow(dilation, 'gray'), plt.title('DILATED')
plt.subplot(235), plt.imshow(closing, 'gray'), plt.title('CLOSED')
plt.subplot(236), plt.imshow(opening, 'gray'), plt.title('OPENED')
plt.show()

f:id:hikuIchi:20160206182907p:plain

もう少し、解りやすい画像にすればよかったです。

python3 opencv3入門-フィルタリング

画像処理といえばフィルタリング、ということで簡単な平滑化とエッジ検出をやってみます。

とはいえ、コードはこれだけです。簡単です

 

mport cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('./images/lenna.jpg', 0)

gaussian = cv2.GaussianBlur(img, (5, 5), 0) #ガウス平滑化
edge = cv2.Canny(img, 100, 200)#cannyフィルタ

plt.subplot(131), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.xticks(), plt.yticks()
plt.subplot(132), plt.imshow(gaussian, 'gray'), plt.title('GAUSSIAN')
plt.xticks(), plt.yticks()
plt.subplot(133), plt.imshow(edge, 'gray'), plt.title('CANNfifY')
plt.xticks(), plt.yticks()
plt.show()

f:id:hikuIchi:20160206174821p:plain

python3 opencv3入門-2値化してみよう

画像処理といえば2値化から、というわけでやってみます

とはいえ、コードはこれだけです。thresholdの値を変えると処理結果が変わると思います。

 

%matplotlib inline
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('./images/lenna.jpg', 0) #グレーで読み出し
#retはとりあえず無視してくれていいです
threshold = 127
ret, binImage = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)#二値化

plt.subplot(121), plt.imshow(img, 'gray')
plt.subplot(122), plt.imshow(binImage, 'gray')
plt.show()

f:id:hikuIchi:20160206173143p:plain

 

python3 opencv3入門-理論編

理論編何て言っときながら、本を紹介するだけです。

 

cg-arts協会ってトコが、画像処理エンジニア検定っていう資格試験やっているのですが、その教科書2冊が割と、ザーっと画像処理の基礎を勉強するのに向いています。

青いほうは基礎で、緑が応用(高いのでKindle版をお勧め)。大学の学部時代にも、持ってる友人が割と多かったような...

ちなみに、資格は割と簡単なのでチャレンジしてみるのも良いかもしれません。

 

ディジタル情報処理

 

ディジタル画像処理

 問題集

python3 opencv3入門-環境構築編

python3 でopencvを触るようになってから割と時間が経ったため、Tipsをまとめてみようと思う。

 

まず、環境構築

基本的にはanaconda を使うのが一番楽だと思います。

macでもwindowsでもとりあえず公式サイトからダウンロードする。

Download Anaconda now! | Continuum

パスは勝手に追加されるので、ターミナルが起動してたら再起動だけすること。

 

windowsなら コマンドプロンプト

conda create -n py35con python=3.5 anaconda

を入力して環境構築。そのあと

activate py35con

 

macならターミナルで

conda create -n py34 python=3.4 anaconda

を入力して環境構築。そのあと

source activate py34con

と打てば環境を立ち上げる事ができる。

 

ターミナル(もしくはコマンドプロンプト)に(py34con)とか(py35con)とか表示されたら、ipython notebookと叩いてみましょう。

そうすると、ブラウザにjupyterというページが立ち上がるので。

右上のnewを押してpython3をクリックするとpythonスクリプト環境が立ち上がります。

print('hello')と入力してshift+enterを押すと実行されると思います。

 

次はopencv3の導入

とりあえず、さっきのターミナルでctrl+cで一旦ipython notebookを落とします

macなら

conda install -c https://conda.binstar.org/menpo opencv3

 

と入力するだけ。

windows なら

http://www.lfd.uci.edu/~gohlke/pythonlibs/

ここから、opencv_python-3.1.0+contrib-cp35...をダウンロード

whlがあるフォルダで

pip install "opencv_python-3.1.0+contrib(省略).whl"

と叩けば、簡単にインストール可能

 

そしたら

%matplotlib inline
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('./images/lenna.png' ,0) #lennaをロード
plt.imshow(img, 'gray'), plt.title('LENNA')
plt.show()

と打ってみましょう。(画像ファイルは適当に準備して今いるディレクトリに置いてください)

 レナさんが表示されれば成功です!

 

 

macでopencvのsiftを使う

windows版ではopencv3, python3でSIFTが使えたけど。

macでは未だに環境をpython3では環境構築ができていません。

 

とりあえず、

conda create -n py27cv24 python=2.7 anaconda

して、そこに

conda install -c https://conda.anaconda.org/menpo opencv

するとSIFTは使える。しかし何としてもpython3でopencv3を使えるようにしたい。

何かいい情報があれば教えてください。

 

ちなみに、この環境なら、チュートリのコードがそのまま動きます。

Introduction to SIFT (Scale-Invariant Feature Transform) — OpenCV 3.0.0-dev documentation