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 )

のようになる。