とか、など

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

windows環境でpython3、opencv3を使う超簡単な方法(SIFTも使えるよ)

今回はwindows環境でpython3, opencv3をインストールします。

 

とりあえず、anaconda入れましょう。windowsでも、インストーラ持ってきて一発です。

 

Download Anaconda now! | Continuum

 

入ったら、

conda create -n py35con python=3.5 anaconda

して

activate py35con

で、肝心のopencvをどうするかというと

神のホームページから拾ってくる

しかも、contribパッケージ同梱のwhlがあるという素晴らしさ(opencv3ではsiftとかsurfは別のcontribモジュールに分離されているので、別に導入しなければならない)

ということで

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

ここから、

opencv_python-3.1.0+contrib-cp35...

をダウンロード

さっきのpy35con環境で

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

すれば完璧。後は適当にSIFTを試してみる

 

import cv2

import numpy as np

 

imgOrg  = cv2.imread( './test.bmp' )

imgGray = cv2.cvtColor( imgOrg, cv2.COLOR_BGR2GRAY ) 

 

sift = cv2.xfeatures2d.SIFT_create( nfeatures = 0, nOctaveLayers = 3, contrastThreshold = 0.04, edgeThreshold = 10, sigma = 1.6 )

keypoints, descriptors = sift.detectAndCompute( imgGray, None )

 

 

imgDst = np.empty_like( imgOrg )

cv2.drawKeypoints( imgOrg, keypoints, imgDst, -1, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS )

 

cv2.imwrite( 'hoge.png', imgDst )

cv2.imshow( 'hoge', imgDst )

cv2.waitKey( 0 )

ソーベル使うときはきちんと正規化を

opencv チュートリアルのソーベルフィルタやっているときに微妙につまづいたので。

 

詳しくは下のnotebookに書いたけど、基本的にfloatで処理して正規化をかけないと汚くなるんですよね。あと、ノイズにも敏感なので、基本的には前段に平滑化かけなきゃいけないとか。

割と、こういう細かいノウハウ的なのが、処理の精度にすごく影響を与える場合が多くて、そういうことはあんまり教科書に書いてなかったりする。

なかなか、きちんと画像処理を理解して使えるようになるには時間がかかりそうです。

github.com

 

matplotlibのimshowは勝手に正規化する話

matplotlibを使ってopencvのチュートリをやってた時の話

ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)

#閾値を超えるものは255にするそれ以外はそのまま

として

plt.imshow(thresh, 'gray')

 

すると、画像がほぼほぼ真っ白になる。

TRUNCされmax 127になるはずなのに、おかしい

と思って調べると解決。

python - imshow(img, cmap=cm.gray) shows a white for 128 value - Stack Overflow

 

plt.imshow(thresh, 'gray', vmin = 0, vmax = 255) 

するべきだったのです。vmin, とvmaxを指定しないと勝手に8bitに正規化されてしまうので注意という話。ちゃんと調べてから使えよというね。

あと、ついでにこんなことも分かった。

irphan view使うときも補間切らないと、勝手に補間されてたけどmatplotlibも勝手に補間しちゃうので不要なときは切りましょう

pylabのimshowをMatlabのようにカクカクなピクセルで表示: YATTSUKE BLOG

 

ちなみにthreshのチュートリは書き直しました。

 

github.com

opencv python チュートリアルその2

opencv pythonチュートリアルをやったのでipython notebookで公開

github.com

02: Arithmetric Operations

03: Performance Mesurement

04: Changing Colorspace

05: Geometric Transformations

06: Image Thresholding

07: Smoothing Images

 

こんな感じ

 

python3にopencvを入れてみる

機械学習を勉強するためと言いつつ、なかなか学習まで辿り着かない。

 

今回はopencvを入れて画像処理をしてみる。

 

2015/12/21現在どうもpython3.5だと、opencvがうまく入らなかったので。

conda create -n py34 python=3.4 anaconda

する。こういうときcondaは本当便利

source activate py34 して

Up & Running: OpenCV3, Python 3, & Anaconda - River City Labs

このページに従って、opencvを入れる。

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

せっかくなのでopencv3にした。

import cv2
print(cv2.__version__)

して問題なければOK

 

試しに

#1.画像読み込み

import cv2
import numpy as np

cv2.namedWindow('test')
img = cv2.imread('./images/lenna.png')#画像を適当に用意
cv2.imshow('test', img)

cv2.waitKey(0)
cv2.destroyAllWindows()

#2.グレースケール化

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#3.平滑化フィルタ

blured = cv2.blur(gray, (5,5))#単純平均
gaussianBlured = cv2.GaussianBlur(gray, (5, 5), 0)#ガウシアン

#4.キャニーフィルタ

thrs1 =1000
thrs2 =10
edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5)

#5.二値化

ret, binImg = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)#retは単に閾値が入る。大津の2値化なら決定した閾値が入る

 

というかチュートリが素晴らしいのでそっちを見れば良い。

OpenCV-Python Tutorials — OpenCV-Python Tutorials 1 documentation

 

機械学習学習3日目の記事です

 

AIZU ONLINE JUDGEを使ってpython3を覚える

機械学習を勉強するためにpython3を勉強中

 

とりあえず、オライリーの入門Python3 をざっと読みながら

オンラインジャッジで実際に書いてみる。

AIZU ONLINE JUDGE

オンラインジャッジとはネットでプログラムのテストをしてくれるサイトで、

アルゴリズムの問題などが出題されているのだけれど、

会津オンラインジャッジにはプログラム初心者用の問題が豊富に掲載されていて、

かつ、言語も割と豊富。もちろんpython3もあるので文法を覚えてからの

軽い腕試しにお勧め。

 

機械学習学習2日目の記事です。