序文
片山です。
先日、西新宿5丁目駅と新宿駅で猛ダッシュしてまで乗った終電で、あろうことか寝過ごして海老名まで行ってしまいました。
当然電車はなかったので藤沢市まで歩くことにしました。
海老名の農道が思った以上に暗くてビビったので、たまたま通りかかったお兄さんに話しかけたら車で家まで送ってくれました。
今回こそはとRailsに挑戦する記事を書いている途中で
とのご指摘を受けましたので急遽python記事の続きを書くことにしました。ネタがないのでOpenCVにチャレンジしてみます。
本文
OpenCV導入編
python3とかHomebrewは入っているのでさっさと進めていきます。
numpyをいれる
$ brew install numpy --with-python3
ちゃっちゃとopencvを入れる
なんとなく新しそうという理由でOpenCV3を導入します。
$ brew install opencv3 --with-python3
$ brew link opencv3 --force
とここでエラー。「opencvをunlinkしてからやれアホ」って感じに怒られたので
$ brew unlink opencv
します。以前OpenCVを入れようとしたことがあったのを完全に忘れていました。
再度linkしてあげて完了です。
陰の声:
opencv3をインストールする前にbrew tap homebrew/science
が必要ですヨ状況によってはopencv3をlinkする前に
brew link cmake
とecho 'export PATH="/usr/local/opt/opencv3/bin:$PATH"' >> ~/.bash_profile
の実行が必要かも
チェック
やっとこさOpenCV3が入ったので早速インポート出来るか試してみます。
$ python3
>>> import cv3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'cv3'
ん?まさかな?と思い調べた所、cv2でインポートするっぽいです。普通cv3ってやりたくなりませんかね。
>>> import cv2
>>> cv2.__version__
'3.2.0'
OpenCV3なのにcv2でインポートするなんて知りませんがな、と心のなかで思いつつとりあえず導入はできました。
陰の声:
私だけかもしれませんが、cv2をimportする前に以下を行わないとライブラリのパスを認識できませんでした
-import sys
-sys.path.append('/usr/local/opt/opencv3/lib/python3.6/site-packages')
該当する方は以下のコードでもimport cv2
の前に上の2つを追加してください
OpenCV使用篇
実際どう使うかはよくわからなかったので参考サイトを探しました。
こちらのサイトのサンプルをとりあえず動かしてみます。英語なのでよくわかりません。
widthとheightを取得してコンソールに表示するところは自分で追加しました。
デフォルトではwidth:1280 height:720とのことでした。
参考元のサイトでは"For example, I can check the frame width and height by cap.get(3) and cap.get(4). It gives me 640x480 by default."と言っているのですが載せてるカメラによって違うんでしょうか?
opencv.py
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
print('width:' + str(cap.get(3))) # width
print('height:' + str(cap.get(4))) # height
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
自撮りしてみました。
手のひらを写したので誰か手相鑑定して下さい。
表示するウィンドウのwidthとheightの大きさを変える
デフォルトのまま変えられないとなんか嫌ですね。参考サイトの言うとおりに書いてみました。
仕組みはよくわかりませんがちゃんと変わります。
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
print('default width:' + str(cap.get(3))) # default width
print('default height:' + str(cap.get(4))) # default height
ret = cap.set(3, 320) # set width
ret = cap.set(4, 240) # set height
print('modified width:' + str(cap.get(3))) # modified width
print('modified height:' + str(cap.get(4))) # modified height
while(True):
# capture frame-by-frame
ret, frame = cap.read()
# our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# display the resulting frame
cv2.imshow('frame', gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
結び
お腹が減ったので今回はここまでにします。