AND OR  

OpenCV 2.x についてのメモ書き

導入 (Linux版)

パッケージインストール, ビルド

(ここでは基本的なlinuxオペレーションはある程度行えるものとして進めます)

  • 環境
    CentOS 6.4 (x86_64)
    gcc 4.4.7
    python 2.7.6
    Java 1.7.0
    OpenCV 2.4.7

ビルドに必要なgcc(4.4.x or later), cmake(2.8 or later)は事前にyumで入れておいてください。PythonやJavaバインディングを使いたい場合はもちろん各言語の処理系も(python-develなど)。CentOSの場合はシステムに最初から入っているPythonの上書きは危険なので別途インストールしましょう。

  • yumで必要なパッケージのインストール
    まず、必要なパッケージをインストールします。ffmpeg関連はrpmforgeから取ってくるので、リポジトリは事前に追加しておいてください。
    $ sudo yum install libpng-devel libjpeg-devel libjasper-devel openexr-devel //各種I/Oサポート
    $ sudo yum install --enablerepo=rpmforge ffmpeg-devel  //動画入出力サポート
    $ sudo yum install gtk2-devel  // GUIサポート(サーバ機にインストールする場合は不要)
    $ sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel ant // Javaサポート
  • NumPyのインストール
    Pythonバインディングの新しいインタフェースを利用したい場合はNumPyが必要になります。ここではpipでインストールしています。NumPyはyumからでもインストールできますが、Pythonのパッケージはpipで管理した方がいいかと思います。
    $ sudo pip install numpy
    また、NumPy自体が有用なものなので、OpenCVとは関係なく単体でもインストールしておくことをオススメします。
  • OpenCVのソースコードを取得
    gitリポジトリから最新のソースコードを取得して、インストール先ディレクトリも作成。
    (/usr/local直下にOpenCVをインストールするのはオススメしません)
    $ git clone git://github.com/Itseez/opencv.git
    $ cd opencv
    $ sudo mkdir /usr/local/opencv
  • cmakeの実行
    Python関係のオプションは適宜環境に合わせて指定してください。僕はPythonをソースからコンパイルして/usr/local/python-2.7.6 以下にインストールし、/usr/local/bin/python にPythonインタプリタのシンボリックリンクを作っています。
    (オプションが長いので折り返しています) 僕の環境では以下のような設定内容になりました。Media I/OやVideo I/Oなどの入出力関連の各項目は確認しておいてください。
  • コンパイル/インストール
    あとはmakeでコンパイルしてインストールするだけです。
    $ make -j2
    $ sudo make install
    makeのオプションは任意で、ここでは -j2 を付けてコンパイルしていますがそれでも数分かかりました。サーバ機にインストールする場合、もしWebサービスやブログなどを運営してる方はタイミングを見て実行してください。ビルド中はリソースを喰いますので、ロードアベレージがぐっと上がります。

環境変数の設定

pkg-config等のパスを通しておきます(pkg-configはヘッダファイル、ライブラリ等のコンパイル時のリンクを簡略化するためのツール)。シェル(bash, zsh)の設定ファイル(~/.bashrc, ~/.zshrc)に以下を追記して反映。

export INCLUDE_PATH=/usr/local/opencv/include:$INCLUDE_PATH
export C_INCLUDE_PATH=$INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$INCLUDE_PATH
export LD_LIBRARY_PATH=/usr/local/opencv/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv/lib/pkgconfig:/usr/lib/pkgconfig:$PKG_CONFIG_PATH
source ~/.bashrc

また、Pythonバインディングを利用したい場合は、{インストールディレクトリ}/lib/python2.x/site-packages/cv.so が作られていることを確認して、ここにパスを通しておきましょう(検索パスは、 sysをimportしてsys.pathを出力すれば確認できます)。

コンパイル, 実行

OpenCV付属のサンプルをコンパイルして動作確認します。

$ cd ./samples/c
$ chmod +x build_all.sh
$ ./build_all.sh
compiling contours.c
conpiling convert_cascade.c
...
$ ./{任意の実行ファイル名}

エラーなくコンパイル、実行が出来ればOK。

  • foo.cppをコンパイル・実行 (Cの場合はg++をgccで読み変えてください)
$ g++ -o foo foo.cpp `pkg-config --cflags --libs opencv`
$ ./foo

コンパイルする度に長いオプションを打つのはツラいと思うのでMakefileを作っておきましょう。

  • Makefileの例 (オプション等は便宜追加してください)
    CXX = g++
    CXXFLAGS = `pkg-config --cflags opencv`
    LDFLAGS = `pkg-config --libs opencv`
    TARGET = [email protected]
    SOURCE = [email protected]
    
    TARGET:
    	$(CXX) -o $(TARGET) $(SOURCE) $(CXXFLAGS) $(LDFLAGS)
    
    .PHONY: clean
    clean:
    	rm -f *.o *~
  • コンパイル・実行
    $ make foo
    $ ./foo

Pythonバインディング

Pythonからも利用してみます(NumPyを利用したインタフェース)。画像データを通常のNumPy配列(numpy.ndarray)として扱えるので大変便利です。