環境設定 - OpenCV 2.4 & OpenCV 3.1 & OpenCV 2.2

OpenCV のビルドとインストール

 自分の環境には ROS Kinetic Kame を入れているので,すでに opencv3 のライブラリが一部インストールされている.ただ,開発を進めていくうえでバイナリパッケージのみでなくソースを見たくなる時があるので OpenCV2.4 と OpenCV3.1 をソースビルドしてローカルにインストールした.以下にその手順をまとめておく.(Graph Cut Stereo を試してみたかったので,あとから OpenCV2.2 もインストール.)

OpenCV ダウンロード

以下,ダウンロード先リンク.下記からほしいバージョンを選んでダウンロードする.
github.com

OpenCV Non Free モジュールのダウンロード

 一部新しいライブラリや特許で抑えられている特徴量の計算ライブラリ等は別のリポジトリで管理されているみたい.自分は必要になるので下記のリンク先からダウンロードした.
github.com

 自分は下記の 3 つのバージョンをダウンロードしてきた.

opencv-2.2
opencv-2.4.13
opencv-3.1.0
opencv_contrib-master

パッケージの解凍

$ cd ~/workspace/reps/
$ unzip opencv-2.4.13.zip
$ unzip opencv-3.1.0.zip
$ unzip opencv_contrib-master.zip
$ unzip opencv-2.2.zip

cmake の実行.(OpenCV2.2 は古いので,コンパイルを通すために変更が必要でした.詳しくは本エントリの最後を参照のこと.)

$ cd ~/workspace/reps/opencv-2.4.13
$ mkdir build install
$ cd build
$ cmake -D CMAKE_INSTALL_PREFIX=/home/koichi/workspace/reps/opencv-2.4.13/install -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENGL=ON -DWITH_V4L=ON -DWITH_QT=ON ..
$
$ cd ~/workspace/reps/opencv-3.1.0
$ mkdir build install
$ cd build 
$ cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENGL=ON -DWITH_V4L=ON -DWITH_GSTREAMER=ON -DWITH_QT=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=YES -DCUDA_GENERATION=Auto -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../opencv
make install -j8
$
$ cd ~/workspace/reps/opencv-2.2
$ mkdir build install
$ cmake -D CMAKE_INSTALL_PREFIX=/home/koichi/workspace/reps/opencv-2.2/install -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENGL=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_FFMPEG=OFF ..
$ 

ビルド & インストールの実行.

$ cd ~/workspace/reps/opencv-2.4.13/build
$ make install
$
$ cd ~/workspace/reps/opencv-3.1.0/build
$ make install
$ 
$ cd ~/workspace/reps/opencv-2.2/build
$ make install

上記のようにインストールすれば, "install/share/OpenCV" 配下に CMake の config ファイルが作成されるので, CMake を使ってビルドする場合はこの Config ファイルを指定してビルドすれば必要なパス等を読み込んでくれる.

OpenCV2.2 の変更点

    • 1. opencv-2.2/cvconfig.h.cmake

L22, L23 に下記を追記.

/* V4L/V4L2 capturing support via libv4l */ 
#cmakedefine HAVE_LIBV4L 
    • 2. opencv-2.2/modules/highgui/src/cap.cpp

L174 の下記の記述を削除し,代わりにその下の記述を追記する.

#if defined (HAVE_CAMV4L) || defined (HAVE_CAMV4L2) 
#if defined HAVE_LIBV4L || (defined (HAVE_CAMV4L) && defined (HAVE_CAMV4L2)) 
    • 3. opencv-2.2/modules/highgui/src/cap.cpp

削除 L227

#if !defined WIN32 && defined HAVE_CAMV4L && defined HAVE_CAMV4L2  

追記 L227

#if !defined WIN32 && defined HAVE_LIBV4L

追記 L244

#ifdef HAVE_CAMV4L

追記 L246, L247

#endif 
#ifdef HAVE_CAMV4L2

追記 L249

#endif
    • 4. opencv-2.2/modules/highgui/src/window_QT.cpp

削除 L308

usleep(1000);

追記 L308

struct timespec req;
req.tv_sec = (time_t)0;
req.tv_nsec = 1000000;
nanosleep(&req, NULL);
    • 5. opencv-2.2/modules/highgui/src/cap_v4l.cpp

削除 L217

#include <linux/videodev.h>

追記 L217

#include <libv4l1-videodev.h>