OpenCVは、JPEGとPNGの画像だけを扱うように、できるだけ最小の構成を目指します。
そのため、動画に関する設定はできるだけ除いた形でインストールを行います。
環境
今回の作業環境を確認しておきます。また、以下の作業はすべてターミナルにて行っております。
Ubuntuのバージョン
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"
準備
OpenCVをコンパイルするために必要なライブラリを導入します。
sudo apt-get install build-essential
sudo apt-get install cmake
opencvをaptで管理するためにcheckinstallを導入します。
sudo apt-get install checkinstall
コンパイル時のデータをキャッシュして2回目以降を高速化するためにccacheを導入します。
sudo apt-get install ccache
OpenCVで作成したプログラムで、画像を表示するためのGUIライブラリを導入します。
sudo apt-get install libgtk-3-dev
OpenCVで作成するプログラムで対応させる画像フォーマットを導入します。
sudo apt-get install libjpeg-dev
sudo apt-get install libpng++-dev
OpenCV3.3のインストール
OpenCV3.3をダウンロードします。解凍後に、カレントディレクトリを移動します。
# OpenCV3.3をダウンロード
wget https://github.com/opencv/opencv/archive/3.3.0.tar.gz
# 解凍
tar zxvf 3.3.0.tar.gz
# カレントディレクトリの移動
cd opencv-3.3.0
Makefileの作成を行うために、OpenCV 3.2 Makefile生成用スクリプトファイル(Ubuntu16.04) · GitHubを参考にさせていただきます。
なるべく最小構成となるように、いくつかの項目をOFFにしたものが以下になります。
#!/bin/bash
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_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=OFF \
-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=OFF \
-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=OFF \
-D WITH_JPEG=ON \
-D WITH_LIBV4L=OFF \
-D WITH_OPENCL=ON \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCL_SVM=OFF \
-D WITH_OPENEXR=OFF \
-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=OFF \
-D WITH_TBB=ON \
-D WITH_TIFF=OFF \
-D WITH_UNICAP=OFF \
-D WITH_V4L=OFF \
-D WITH_VTK=OFF \
-D WITH_WEBP=OFF \
-D WITH_XIMEA=OFF \
-D WITH_XINE=OFF \
${SOURCE_DIR}
CMakeを実行し、ビルドします。
sh opencv3.3_build-ubuntu16.04.sh
カレントディレクトリを移動します。
cd build
makeを実行し、コンパイルします。
make -j4
通常のmake installによる方法ではなく、aptやdpkgで操作できるように、checkinstallを用いてOpenCVをパッケージ化したうえでインストールします。
気を付ける点は、Nameを分かりやすく他のライブラリ・パッケージと被らない名前に設定することです。ここでは名前を「opencv3.3」としました。
checkinstallコマンドの最後の方に記載がありますが、アンインストールする場合は「dpkg -r opencv3.3」を実行します。
sudo checkinstall
checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y
パッケージのドキュメンテーションを準備..OK
このパッケージの説明を書いてください
説明の末尾は空行かEOFにしてください。
(con)opencv3.3
(con)
*****************************************
**** Debian package creation selected ***
*****************************************
このパッケージは以下の内容で構成されます:
0 - Maintainer: [ root@<user> ]
1 - Summary: [ opencv3.3 ]
2 - Name: [ build ]
3 - Version: [ 20171016 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ amd64 ]
8 - Source location: [ build ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ build ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
変更するものの番号を入力してください。Enterで続行します: 2
名前を入力:
(con)opencv3.3
このパッケージは以下の内容で構成されます:
0 - Maintainer: [ root@<user> ]
1 - Summary: [ opencv3.3 ]
2 - Name: [ opencv3.3 ]
3 - Version: [ 20171016 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ amd64 ]
8 - Source location: [ build ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ build ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
変更するものの番号を入力してください。Enterで続行します:
Installing with make install...
========================= インストールの結果 ===========================
[ 0%] Built target ittnotify
[ 15%] Built target libprotobuf
[ 28%] Built target opencv_core
[ 29%] Built target opencv_flann
[ 42%] Built target opencv_imgproc
[ 46%] Built target opencv_ml
[ 48%] Built target opencv_objdetect
[ 51%] Built target opencv_photo
[ 54%] Built target opencv_video
[ 65%] Built target opencv_dnn
[ 69%] Built target opencv_imgcodecs
[ 71%] Built target opencv_shape
[ 72%] Built target opencv_videoio
[ 73%] Built target opencv_highgui
[ 75%] Built target opencv_superres
[ 78%] Built target opencv_ts
[ 83%] Built target opencv_features2d
[ 89%] Built target opencv_calib3d
[ 92%] Built target opencv_stitching
[ 94%] Built target opencv_videostab
[ 96%] Built target opencv_traincascade
[ 97%] Built target opencv_createsamples
[ 98%] Built target opencv_annotation
[ 99%] Built target opencv_visualisation
[100%] Built target opencv_interactive-calibration
[100%] Built target opencv_version
======================== インストールに成功しました ==========================
Copying documentation directory...
./
./doc/
./doc/Makefile
./doc/CTestTestfile.cmake
./doc/cmake_install.cmake
./doc/CMakeFiles/
./doc/CMakeFiles/progress.marks
./doc/CMakeFiles/CMakeDirectoryInformation.cmake
Some of the files created by the installation are inside the home directory: /home
You probably don't want them to be included in the package.
それらを表示しますか? [n]: n
それらをパッケージから除外しますか?(yesと答えることをおすすめします) [n]: yes
Some of the files created by the installation are inside the build
directory: /home/<user>/opencv/opencv-3.3.0/build
You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them? [n]: n
それらをパッケージから除外しますか?(yesと答えることをおすすめします) [y]: yes
tempディレクトリにファイルをコピー..OK
Stripping ELF binaries and libraries...OK
manページを圧縮..OK
ファイルリストを作成..OK
Debianパッケージを作成..OK
Debianパッケージをインストール..OK
tempファイルを削除..OK
バックアップパッケージを書き込み..OK
OK
temp dirを削除..OK
**********************************************************************
Done. The new package has been installed and saved to
/home/<user>/opencv/opencv-3.3.0/build/opencv3.3_20171016-1_amd64.deb
You can remove it from your system anytime using:
dpkg -r opencv3.3
**********************************************************************
作成したOpenCVパッケージがインストールされたかを確認します。
dpkg -l | grep opencv
ii opencv3.3 20171016-1 amd64 opencv3.3
OpenCVを適用させます。
sudo ldconfig
サンプルプログラムの実行
サンプルプログラムを作成し、実行してみます。あらかじめ、適当な画像ファイルを用意して作成するサンプルプログラムと同一階層に「sample.jpg」として配置しておきます。
ここでは、「SAMPLE」とだけ記載した画像をあらかじめ作成しておきました。
vimエディタでサンプルプログラムをC++で作成します。
vim sample.cpp
以下の内容をコピーし、保存して閉じます。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
int main(int argc, const char* argv[])
{
cv::Mat mat = cv::imread("sample.jpg", cv::IMREAD_COLOR);
cv::namedWindow("sample", cv::WINDOW_AUTOSIZE);
cv::imshow("sample", mat);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
サンプルプログラムをコンパイルします。
g++ sample.cpp -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui
サンプルプログラムの実行を実行します。
./a.out
ピンバック:RasPi:OpenCVで遊んでみた♬ | IT技術情報局