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 )
ソーベル使うときはきちんと正規化を
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のチュートリは書き直しました。
opencv python チュートリアルその2
python opencvのチュートリやってみるその1
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日目の記事です