OpenCVの本当に動くインストール手順

公式を含め、ネット上のインストール手順を見てるとどこかしら動かなくてハマったり、build中にエラー出たりして、途方に暮れてしまうので、自分できちんとチェックして動くものを手順書として作りました。

補償範囲

* OpenCVが単体で動く。（pythonの`import cv2`は考慮外）
   * `opencv_tranincascade`と`opencv_createsamples`が動く

# インストール手順

## CentOS

一番シンプルな構成でいい、もしくは`opencv_traincascade`を使いたいだけであれば、CentOSが一番楽だと思います。
依存パッケージインストールしてmakeしてinstallするという普通の流れで引っかかることなくインストールが完了するので

使用するOS Version: 7.5

```bash
# root権限
su -

# 依存パッケージをインストールする
yum install -y git gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel
yum install -y cmake libjpeg-devel libtiff-devel libpng-devel jasper-devel
yum install -y mesa-libGL-devel libXt-devel libgphoto2-devel nasm libtheora-devel
yum install -y autoconf automake gcc-c++ libtool yasm openal-devel blas blas-devel atlas atlas-devel lapack lapack-devel
yum install -y tbb-devel

# opencvとopencv_contribのソースをgithubからダウンロードする（zipに圧縮しているものでも可）
#  masterにチェックアウトしているものも見かけるけど、それだと開発中のバージョンになるので、タグから最新のバージョンを指定する
cd /usr/local/src
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout -b 3.4.3 refs/tags/3.4.3
cd ../opencv/
git checkout -b 3.4.3 refs/tags/3.4.3

# ビルドしてインストールする
mkdir build
cd build
# cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j7
make install
echo /usr/local/lib > /etc/ld.so.conf.d/opencv.conf
ldconfig -v

# きちんとインストールされていることを確認する
#   opencvっていうコマンドはないので注意
opencv_version
```

## Ubuntu

`jasper-devel` がインストールできない問題をはじめ、OpenCVに関してはインストール時のハマりどころがたくさんあります。
自分もどちらかと言うとUbuntu使いなのですが、ことOpenCVに関してはおすすめできない。
今回はMinimumで必要なものを入れてますが、使いたい機能次第では、必要なパッケージが入っているリポジトリを追加する必要があるかもしれないので、探り探り対応してください

使用するOS Version: 18.04

```bash

# root権限
sudo su -

apt-get update
apt-get upgrade

# libjasper-devを入れるためにリポジトリを追加
add-apt-repository "deb http://security.ubuntu.com/ubuntu bionic-security main"

# 依存パッケージをインストールする
apt-get -y install build-essential checkinstall cmake unzip pkg-config yasm
apt-get -y install git gfortran python3-dev
apt-get -y install libjpeg8-dev libjasper-dev libpng12-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libv4l-dev
apt-get -y install libjpeg-dev libpng-dev libtiff-dev libtbb-dev
apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libatlas-base-dev libxvidcore-dev libx264-dev libgtk-3-dev

# opencvとopencv_contribのソースをgithubからダウンロードする（zipに圧縮しているものでも可）
#  masterにチェックアウトしているものも見かけるけど、それだと開発中のバージョンになるので、タグから最新のバージョンを指定する
cd /usr/local/src
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout -b 3.4.3 refs/tags/3.4.3
cd ../opencv/
git checkout -b 3.4.3 refs/tags/3.4.3

# ビルドしてインストールする
mkdir build
cd build
# cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j7
make install
echo /usr/local/lib > /etc/ld.so.conf.d/opencv.conf
ldconfig -v

# きちんとインストールされていることを確認する
#   opencvっていうコマンドはないので注意
opencv_version
```

# Appendix

## OpenCVをアンインストールしたいとき
```bash
cd /usr/local/src/opencv/build
make uninstall
rm -rf /usr/local/lib/opencv*
rm -rf /usr/local/include/opencv*
```

## バージョンに関して

3.4.4だと病的なまでに学習途中でコケたので3.4.3にドキュメントに記載するバージョンを変更しました。
3.4.3だと動くのは確認しました。
何が原因かはコードを読み解いてないのでわかりません。