conta's diary

思ったこと、やったことを書いてます。 twitter: @conta_

linux(CentOS)にOpencv2.3をインストール

準備

gccのインストール

2.3はgccのバージョンが4.3以上必要らしい。
ここが結構はまった。

yum install gcc44
yum install gcc44-c++

なぜか僕の環境では、最初gcc44-c++がyumから入れられなかった。
理由は、libstdc++44というライブラリが必要だったこと
gcc44-c++を入れるのに必要なんだけど、yumからこのライブラリを入れようとすると、
404エラーがかってくる。他のサーバーでは入れられたのに(/_;)
仕方が無いので、ネットでcentosのlibstdc++44のrpmパッケージを探して入れた。

wget ftp://ftp.pbone.net/mirror/ftp.centos.org/5.7/os/x86_64/CentOS/libstdc++44-devel-4.4.4-13.el5.x86_64.rpm

rpm -ivh libstdc++44-devel-4.4.4-13.el5.x86_64.rpm

cmakeのインストール

今回はyumからインストールした。

yum install cmake

だったかな?昔入れたのて覚えてない。。。

ライブラリのインストール

zlib, jpeg, png, tiff, ffmpegあたりが必要かな?
前入れてたので今回は省略、使わないやつも入れてない。

yum install libpng-devel libjpeg-devel  //png, jpegサポート
yum install --enablerepo=rpmforge ffmpeg-devel gstreamer-devel //動画入出力サポート

とかするといいらしい。

Opencvのダウンロード

公式サイトからDL。
適当なとこに移動して、DL&解凍。

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2/download
tar jxfv OpenCV-2.3.1a.tar.bz2
cd OpenCV-2.3.1
#ビルド用のフォルダを作る
mkdir release

ビルドっ!

cmake

今回はこんな感じのオプションにした。適時インストールPathを設定してもいいかも。

cmake -D BUILD_EXAMPLES=YES -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/[your install path] -D BUILD_NEW_PYTHON_SUPPORT=NO -D WITH_1394=OFF -D CMAKE_C_COMPILER=gcc44 -D CMAKE_CXX_COMPILER=g++44 ../

結果は下記の通り

-- General configuration for opencv 2.3.1 =====================================
-- 
--     Built as dynamic libs?:     YES
--     Compiler:                   /usr/bin/c++
--     C++ flags (Release):          -Wall -Wno-long-long -pthread -ffunction-sections  -O3 -DNDEBUG  -fomit-frame-pointer -msse -msse2 -DNDEBUG 
--     C++ flags (Debug):            -Wall -Wno-long-long -pthread -ffunction-sections  -g  -O0 -DDEBUG -D_DEBUG -ggdb3 
--     Linker flags (Release):      
--     Linker flags (Debug):        
-- 
--   GUI: 
--     GTK+ 2.x:                   NO
--     GThread:                    NO
-- 
--   Media I/O: 
--     ZLib:                       YES
--     JPEG:                       TRUE
--     PNG:                        TRUE
--     TIFF:                       TRUE
--     JPEG 2000:                  build
--     OpenEXR:                    NO
--     OpenNI:                     NO
--     OpenNI PrimeSensor Modules: NO
--     XIMEA:                      NO
-- 
--   Video I/O:
--     DC1394 1.x:                 NO
--     DC1394 2.x:                 NO
--     FFMPEG:                     YES
--       codec:                    YES
--       format:                   YES
--       util:                     YES
--       swscale:                  YES
--       gentoo-style:             YES
--     GStreamer:                  NO
--     UniCap:                     NO
--     PvAPI:                      NO
--     V4L/V4L2:                   /
--     Xine:                       NO
-- 
--   Other third-party libraries:
--     Use IPP:                    NO
--     Use TBB:                    NO
--     Use ThreadingFramework:     NO
--     Use Cuda:                   NO
--     Use Eigen:                  NO
-- 
--   Interfaces:
--     Python:                     YES
--     Python interpreter:         /usr/bin/python (ver )
--     Python numpy:               NO (Python wrappers will not be generated)
--     Java:                       NO
-- 
--   Documentation:
--     Sphinx:                     NO
--     PdfLaTeX compiler:          NO
--     Build Documentation:        NO
-- 
--   Tests and samples:
--     Tests:                      YES
--     Examples:                   NO
-- 
--   Install path:                 /usr/local
-- 
--   cvconfig.h is in:             /root/temp/OpenCV-2.3.1/release
-- -----------------------------------------------------------------

make&install

コンパイラに怒られないか心配しながらmake

make
make install

すると、/usr/loca/libと/usr/local/includeにインストールされる

動作確認

テストコード

テキトーに書いた。
画像はsampleからとってきた。
今回はグレースケールにして保存するテストにしてみた。

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace std;

int main(){
  cout << "welcome to OpenCV world!" <<endl;
  cv::Mat img;
  img = cv::imread("airplane.jpg", 0);

  cv::imwrite("out.jpg", img);


  return 0;
}

ビルド

パスを通して、
こんな感じでコンパイル&実行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
g++44 test.cpp -I/usr/local/include -L/usr/local/lib -lopencv_core -lopencv_highgui

./a.out

動いた!
ちゃんと画像がグレーになってました(・∀・)
おしまい!

*今回はサーバー2台分にインストールで、記述や結果ちょっとおかしい部分や、書き忘れがあるかもしれません。

しかしめっちゃ時間かかった。
何回やり直したことか。。。
インストールってめちゃんこめんどくさいよね^^;