2014/11/07 LinuxでOpenCVの環境を構築してみる。

Linux,OpenCV

今回は、Linux環境でOpenCVを使えるような環境を構築してみようと思います。
環境

で行います。
ということなのですが、何の資料もなくできるわけがないので下記のサイトを参考に導入いたします。
Installing OpenCV 2.4.9 in Ubuntu 14.04 LTS


1.まずは最新の状態に保ちましょう。
以下のコマンドで、最新にします。


sudo apt-get update
sudo apt-get upgrade
			

2.以下のパッケージをインストールしましょう。
マシンによっては結構時間がかかるかもしれません。


sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev
             libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev
             python-numpy python-tk libtbb-dev libeigen3-dev
             yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev
             libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev
             libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra
             libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev
             libswscale-dev default-jdk ant libvtk5-qt4-dev
			

3.作業用のディレクトリを作成して、webからopencvをダウンロードしましょう。
wgetコマンドで取れなかった場合は、SouceforgetのコチラのページからURLを探しましょう。
(GUI環境がない場合は、どうすればよいのだろうか?)


mkdir ~/opencv_dir
cd ~/opencv_dir
wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip
unzip opencv-2.4.9.zip
cd opencv-2.4.9
			

4.OpenCVがダウンロードできたら、以下のコマンドを打ちましょう。
少し時間がかかります。


mkdir build
cd build
cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON
	  -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D
	  INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D
	  WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..

5.cmakeをしたら、いよいよmakeです。
この作業はとても時間がかかるので、(今回は1時間かかった)覚悟をしましょう。
RaspberryPiだと10時間近くかかるらしいです。


make
sudo make install

6.パスの設定をします。
適当なエディタで、opencv.confを開きます。


sudo gedit /etc/ld.so.conf.d/opencv.conf
以下のパスを追加する。
/usr/local/lib

7.設定の反映


sudo ldconfig

8.さらにパスの設定


sudo gedit /etc/bash.bashrc
以下を追加する。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

9.サンプルを動かす。


cd ~/opencv_dir/opencv-2.4.9/samples/c
chmod +x build_all.sh
./build_all.sh
これでビルド完了。

./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
--scale=1.5 lena.jpg
レナさんの顔を検出できます。

自作ソースのコンパイル

さて、ここまでが参考にさせていただいたサイトの要約になりますが、
ここからは自分で作ったソースを動かしてみましょう。

1.ソースをつくる。

一から作るのは骨が折れますので、OpenCVのサイトからカメラ検出のソースを取ってきました。

#include "cv.h"
#include "highgui.h"
#include "ctype.h"
int
main (int argc, char **argv)
{
  CvCapture *capture = 0;
  IplImage *frame = 0;
  double w = 320, h = 240;
  int c;

  // (1)コマンド引数によって指定された番号のカメラに対するキャプチャ構造体を作成する
  if (argc == 1 || (argc == 2 && strlen (argv[1]) == 1 && isdigit (argv[1][0])))
    capture = cvCreateCameraCapture (argc == 2 ? argv[1][0] - '0' : 0);

  /* この設定は,利用するカメラに依存する */
  // (2)キャプチャサイズを設定する.
  cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w);
  cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h);

  cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);

  // (3)カメラから画像をキャプチャする
  while (1) {
    frame = cvQueryFrame (capture);
    cvShowImage ("Capture", frame);
    c = cvWaitKey (2);
    if (c == '\x1b')
      break;
  }

  cvReleaseCapture (&capture);
  cvDestroyWindow ("Capture");

  return 0;
}
このソースをコピーし、以下のコマンドを実行しましょう。

mkdir ~/opencv_test
cd ~/opencv_test
vim test.cpp
エディタが起動するので、ソースをコピー&ペーストしましょう。
このソースをコンパイルし、実行ファイルを作成するわけですが、
オプションを付けずにコンパイルすると、
「定義されていない参照です」などと言われてしまいます。
ですので、gcc,g++にリンカオプションを渡します。

g++ test.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
としてやることで、うまくコンパイルが通ります。
コンパイルが通ったら、

./a.out
で、プログラムを実行しましょう。
-o オプションとかで、実行ファイルの名前付けもできるのでいろいろ試してみましょう。
最後に...
OpenCVには無限の可能性が詰まってますね…。

参考にさせていただいたサイト

Installing OpenCV 2.4.9 in Ubuntu 14.04 LTS
http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/

OpenCV.jp ビデオ入出力 サンプルコード
http://opencv.jp/sample/video_io.html

初めてのOpenCV開発 ― highguiモジュール【OpenCV 2.4.9】
http://www.buildinsider.net/small/opencv/05

LINUXでOPENCVを入れて適当なコードをコンパイルするまで
http://www.yasutomo57jp.com/2010/09/01/linux%E3%81%A7opencv%E3
%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E9%81%A9%E5%BD%93%E3%81%AA%
E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%82%B3%E3%83%B3%E3%83%91%E3%
82%A4%E3%83%AB%E3%81%99%E3%82%8B%E3%81%BE%E3%81%A7/

gccのリンク付きエラーからの
http://crawlence.hatenablog.com/entry/2013/09/14/031914