OpenCV環境修正

先日作ったOpenCVの環境がうまくないので修正しました。

問題は二つありました。

  • インクルードファイルがすべてのOpenCV関数を網羅していないこと。
  • ライブラリがすべてのOpenCV関数を網羅していないこと。

これらはビルド時間の削減、実行ファイルサイズの削減を狙っているのかも知れません。しかし、やはり「動かして、次に最適化」です。私の立場ではサイズ最適化や時間最適化は動いてから必要に応じて勉強すれば良いのであって、今からそれを狙っても同時に勉強すべき事が増えすぎて手に負えません。

ということで、それぞれ修正をかけました。

まず、ソースファイルですが、ここではインクルードファイルを整理しています。参考にしたページではインクルード・ファイルをOpenCVの機能毎に細かく指定していましたが、それをやめて、opencv.hppのみを読み込んでいます。

また、opencv/というパスを指定することで、インクルード・パスをコンパイラに指定する必要も無くなります。

#include <opencv2/opencv.hpp>
#include <stdio.h>

int main(int argc, const char* argv[])
{
  // 画像データをファイルから読み込む
  cv::Mat src = cv::imread("img/lena.jpg", cv::IMREAD_COLOR);


  // 画像の読み込みに失敗したらエラー終了する
  if(src.empty())
  {
    std::cerr << "Failed to open image file." << std::endl;
    return -1; 
  }

  cv::namedWindow("image", cv::WINDOW_AUTOSIZE);
  cv::imshow("image", src);
  cv::waitKey(0);
  cv::destroyAllWindows();

  return 0;
}

次に、インストーラーですが、これはOpenCV 3.1をダウンロードするようにしました。後から考えるとこれは別にOpenCV 3.0のままで良かったようですが、3.1で困ることもなさそうなので、変更したままにしています。

#! /bin/sh
# Setting the Ubuntu for open-CV

sudo apt-get -yV install cmake
sudo apt-get -yV install libeigen3-dev

# GUIフレームワーク関連

sudo apt-get -yV install libgtk2.0-dev
sudo apt-get -yV install libgtkglext1-dev
sudo apt-get -yV install libqt4-dev
sudo apt-get -yV install freeglut3-dev

# 並列処理関連

sudo apt-get -yV install opencl-headers
sudo apt-get -yV install libtbb-dev

# 画像フォーマット関連

sudo apt-get -yV install libjpeg-dev
sudo apt-get -yV install libjasper-dev
sudo apt-get -yV install libpng++-dev
sudo apt-get -yV install libtiff-dev
sudo apt-get -yV install libopenexr-dev
sudo apt-get -yV install libwebp-dev

# Python関連

# ubunt-14.04
#sudo apt-get -yV install libpython3.4-dev

# ubuntu-16.04
#sudo apt-get -yV install libpython3.5-dev

sudo apt-get -yV install libpython3-dev
sudo apt-get -yV install python-numpy python-scipy python-matplotlib
sudo apt-get -yV install python3-numpy python3-scipy python3-matplotlib

# OpenCV の取得
# wget https://github.com/opencv/opencv/archive/3.0.0.tar.gz
wget https://github.com/opencv/opencv/archive/3.1.0.tar.gz

 

このインストーラはUbuntuの設定をした後、OpenCV 3.1をダウンロードするだけです。実際の展開は手作業で行ってください。

展開した後、ターミナル・ウインドウを使ってOpenCV 3.1のディレクトリに入ります。次にコピーした以下のビルドスクリプトを実行してください。このスクリプトはcmakeを使ってmakeファイルを造り、ビルドします。これまでとは一箇所変えており、それによってlibopencv_world.soを作ります。

#!/bin/bash

# Build script for Open-CV 3
# CMAKE build environment setting in open-cv directory

SOURCE_DIR="echo $(cd $(dirname $0);pwd)"
BUILD_DIR=${SOURCE_DIR}/build
GENERATOR_NAME="Unix Makefiles"

mkdir build
cd build

cmake \
-G "${GENERATOR_NAME}" \
--build ${BUILD_DIR} \
-D BUILD_CUDA_STUBS=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_JASPER=OFF \
-D BUILD_JPEG=OFF \
-D BUILD_OPENEXR=OFF \
-D BUILD_PACKAGE=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_PNG=OFF \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_TBB=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_TIFF=OFF \
-D BUILD_WITH_DEBUG_INFO=ON \
-D BUILD_ZLIB=OFF \
-D BUILD_WEBP=OFF \
-D BUILD_opencv_apps=ON \
-D BUILD_opencv_calib3d=ON \
-D BUILD_opencv_core=ON \
-D BUILD_opencv_cudaarithm=OFF \
-D BUILD_opencv_cudabgsegm=OFF \
-D BUILD_opencv_cudacodec=OFF \
-D BUILD_opencv_cudafeatures2d=OFF \
-D BUILD_opencv_cudafilters=OFF \
-D BUILD_opencv_cudaimgproc=OFF \
-D BUILD_opencv_cudalegacy=OFF \
-D BUILD_opencv_cudaobjdetect=OFF \
-D BUILD_opencv_cudaoptflow=OFF \
-D BUILD_opencv_cudastereo=OFF \
-D BUILD_opencv_cudawarping=OFF \
-D BUILD_opencv_cudev=OFF \
-D BUILD_opencv_features2d=ON \
-D BUILD_opencv_flann=ON \
-D BUILD_opencv_hal=ON \
-D BUILD_opencv_highgui=ON \
-D BUILD_opencv_imgcodecs=ON \
-D BUILD_opencv_imgproc=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_ml=ON \
-D BUILD_opencv_objdetect=ON \
-D BUILD_opencv_photo=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_shape=ON \
-D BUILD_opencv_stitching=ON \
-D BUILD_opencv_superres=ON \
-D BUILD_opencv_ts=ON \
-D BUILD_opencv_video=ON \
-D BUILD_opencv_videoio=ON \
-D BUILD_opencv_videostab=ON \
-D BUILD_opencv_viz=OFF \
-D BUILD_opencv_world=ON \
-D CMAKE_BUILD_TYPE=RELEASE \
-D WITH_1394=ON \
-D WITH_CUBLAS=OFF \
-D WITH_CUDA=OFF \
-D WITH_CUFFT=OFF \
-D WITH_EIGEN=ON \
-D WITH_FFMPEG=ON \
-D WITH_GDAL=OFF \
-D WITH_GPHOTO2=OFF \
-D WITH_GIGEAPI=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GTK=ON \
-D WITH_INTELPERC=OFF \
-D WITH_IPP=ON \
-D WITH_IPP_A=OFF \
-D WITH_JASPER=ON \
-D WITH_JPEG=ON \
-D WITH_LIBV4L=ON \
-D WITH_OPENCL=ON \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCL_SVM=ON \
-D WITH_OPENEXR=ON \
-D WITH_OPENGL=ON \
-D WITH_OPENMP=OFF \
-D WITH_OPENNI=OFF \
-D WITH_PNG=ON \
-D WITH_PTHREADS_PF=OFF \
-D WITH_PVAPI=ON \
-D WITH_QT=ON \
-D WITH_TBB=ON \
-D WITH_TIFF=ON \
-D WITH_UNICAP=OFF \
-D WITH_V4L=OFF \
-D WITH_VTK=OFF \
-D WITH_WEBP=ON \
-D WITH_XIMEA=OFF \
-D WITH_XINE=OFF \
${SOURCE_DIR}

# make the library
make -j2

# install the library
sudo make install

# conifugre the dynamic links
sudo ldconfig

スクリプトの実行が終わると、libopencv_world.soがインストールされます。実際のアプリではこのlibopencv_world.so のみリンクすれば、Open CVのすべての関数を使用できます。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください