Python OpenCV Old - eiichiromomma/CVMLAB GitHub Wiki
Python) OpenCV旧情報
(PythonでOpenCV
OpenCVも参照
インストール
Windows
Python/Windowsを参考にインストールする。OpenCVもインストーラがあるのでそっちを使う。
Mac OS X
必要なライブラリはpipを使うのが手っ取り早い。OpenCVはHomebrewを使う。(後日追記)
旧
Python/MacOSXにあるSuperpackを使うとNumpyやipython関係が一気に整う。あとはOpenCV/Mac OSX環境/SVN版のインストールを参照。
確認
IPythonのpylabを起動して
%cd 'フォルダ名'
で適当な画像ファイルのある場所に移動する。フォルダ名もTABキーで補間可能で''を'/'に置き換えて入力する。
ls *.jpg
とでもすれば確認できる。
import cv2 as cv
img = cv.imread('画像ファイル', 1)
cv.imshow('test', img)
で画像が表示される。勿論
cv.waitKey(0)
とすればキー入力を待てる。
pylabを使っていないとwaitKeyするまで画像は表示されない。
アプリケーションの作成
上記サンプルのように
import cv2 as cv
とする。as cvとしているのは旧環境との互換性のため。関数はcv.で書き始める。
.pyファイルの記述法
IPythonを使っている場合、
%history
で履歴の参照が可能なのでプロンプトで試した後に.pyファイルを作成しても良い。IPythonからエディタを呼び出すには
%edit ファイル名
として、実行する場合には
%run ファイル名
とする。
.pyファイルは頭からドバーっと書いても問題無く動くものの、見易さが著しく低下する。 実行させるコードの領域を明確にする方が良い。
旧情報
インストール
OpenCVが導入済みの場合は
C:\Program Files\OpenCV\interfaces\swig\python\build \lib.win32-2.5
にPython用のwrapperの入ったフォルダ"opencv"がある。(OpenCVを未導入の場合はOpenCV参照) このopencvフォルダを
C:\Python25\Lib\site-packages
の中へコピーする。
確認
C:\Program Files\OpenCV\samples\python
のスクリプトを実行してみる。中にはUSBカメラを必要とするものもある。contours.pyはカメラが無くても動く。
PyScripterとの連動
関数を打ち込んで「(」を打つと引数のHintが表示される。
別の手段として、マウスカーソルを関数上に持って行くと定義を表示できるのだが、引数はWrapperのため*argsとなってしまう
定義されているファイル名へのリンクを開く。
def cvLoadImage(*args):
"""
cvLoadImage(char filename, int iscolor=1) -> CvMat
cvLoadImage(char filename) -> CvMat
"""
return _highgui.cvLoadImage(*args)
のように
def 関数名(*args):
""文字列で本来の定義を表記""
return 関数の実体(*args) ←基本的に直接指定はしない
のルールで記載されているため、ここまで開けば関数に必要な引数と返り値が分かる。
アプリケーションの作成
importでcvとhighguiの利用を宣言する。 流儀は2種類あるらしい。
Cと親和性の高いimport
from opencv.cv import *
from opencv.highgui import *
とする。 関数はCのソースと同じように表記すれば良い。
Pythonの流儀に近いimport
from opencv import cv
from opencv import highgui
とする 関数は
cv.cvCreateImage (cv.cvSize (500, 500), 8, 3)
highgui.cvNamedWindow ('hull', highgui.CV_WINDOW_AUTOSIZE)
のように出処を明記する必要がある。
その他サンプル
OpenCVに随時追加の予定
実装の特徴
参照受け渡し
Cだと
cvMinMaxLoc(img , &min, &max, minPoint, maxPoint, mask);
のようになるが、変数の参照受け渡しは出来ないので
minval,maxval= cvMinMaxLoc(img ,minPoint,maxPoint, mask )
のようになる。