OpenCVの公式チュートリアルをやってみた

# はじめに
OpenCVを習得するため、公式チュートリアルを一通り実施した記録を執筆します。
なお操作性向上のため、実行環境は普段使いなれているWindows上で行います。
OpenCVのバージョンは4.5.4、ビルド時の最新バージョンを採用。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655595/3f813ac8-ba39-dac4-abe6-93f1960b7ae1.png)

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [Chapter1 Windows環境](#Chapter1)
1. [Chapter2 Introduction to OpenCV](#Chapter2)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# Chapter1 Windows環境

OS; Windows11
OpenCV; 4.5.4
Git-bash; 2.23.1
CMake; 3.21.4
開発環境; Visual Studio 2019

それぞれのインストール方法は割愛します。

<a id="#Chapter2"></a>
# Chapter2 Introduction to OpenCV
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655595/c524d4f1-7320-9ec5-9f82-22bd5ed9cbf9.png)

`OpenCV installation overview`
`OpenCV configuration options reference`
→ あくまでOverviewとConfiguration options referenceであり、読まなくても進めれそうなのでスキップ。
今回はWindowsを使用するため、`Linux`, `Java&Android`, `Other platforms`も割愛。

### Installation on Windows

注意：この記事全般に言えることですが、チュートリアルはWin7など記事とは異なるWinOSでの動作確認をしてます。
当然、まだオフィシャルリリースがされていないWin11での動作保証なんてされているわけがない。__動くことを願うのみ。__よっぽど大丈夫だと思うが。

OpenCVのライブラリをインストールするにあたり、3つの方法が紹介されている。

- 予めビルドされたライブラリから取得する方法
- CMakeとGit-bashを使ってビルドする方法
- ソースファイルから直接ビルドする方法

本記事では1つ目と2つ目を実施。~~正直3つ目は面倒くさい。~~
1つ目が一番楽だが、ビルド時のオプションが設定できないためあまり推奨しない。

##### 予めビルドされたライブラリから取得する方法
Windows用のexeファイルが[ここ](https://sourceforge.net/projects/opencvlibrary/files/)で公開されている。
実行するとインストーラーが立ち上がり、解凍先パスを指定すると下記のようなファイル構成で格納される。
![スクリーンショット 2021-11-05 222225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655595/ca1f5370-fbdd-1f54-0952-66e67fffa4a9.png)
今回は執筆のためにダウンロードフォルダ直下に格納しているが、整理整頓のために違うファイルパスへの格納を推奨。（例、`C:\lib`）また、前述の通りビルドオプションは設定不可。

最後にOpenCVの環境変数を設定。変数値については環境によって異なりますが、筆者は次のように設定。
変数名`OPENCV_DIR`、変数値`C:\Users\USERNAME\Downloads\opencv\build\x64\vc15`、`C:\Users\USERNAME\Downloads\opencv\build\x64\vc14`


##### CMakeとGit-bashを使ってビルドする方法
はじめに、CMakeとGit-bashをインストールしておく必要あり。それぞれのインストール時、CMakeは環境変数を追加する設定にしておくこと、一方でGit-bashは追加しない設定にしておくこと。（インストール方法詳細は割愛）

次に、Cドライブ直下に`lib`フォルダを作成。Git-bashから次のコマンド実行。

```bash:bash
mkdir /c/lib
cd /c/lib
```
次にシェルスクリプト`installOCV.sh`を`c:/lib`に脳死で作成。

```shell:installOCV.sh
#!/bin/bash -e
myRepo=$(pwd)
CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 16 2019"
#CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 15 2017 Win64"
#CMAKE_GENERATOR_OPTIONS=(-G"Visual Studio 16 2019" -A x64)  # CMake 3.14+ is required
if [  ! -d "$myRepo/opencv"  ]; then
    echo "cloning opencv"
    git clone https://github.com/opencv/opencv.git
else
    cd opencv
    git pull --rebase
    cd ..
fi
if [  ! -d "$myRepo/opencv_contrib"  ]; then
    echo "cloning opencv_contrib"
    git clone https://github.com/opencv/opencv_contrib.git
else
    cd opencv_contrib
    git pull --rebase
    cd ..
fi
RepoSource=opencv
mkdir -p build_opencv
pushd build_opencv
CMAKE_OPTIONS=(-DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_DOCS:BOOL=OFF  -DWITH_CUDA:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DINSTALL_CREATE_DISTRIB=ON)
set -x
cmake "${CMAKE_GENERATOR_OPTIONS[@]}" "${CMAKE_OPTIONS[@]}" -DOPENCV_EXTRA_MODULES_PATH="$myRepo"/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX="$myRepo/install/$RepoSource" "$myRepo/$RepoSource"
echo "************************* $Source_DIR -->debug"
cmake --build .  --config debug
echo "************************* $Source_DIR -->release"
cmake --build .  --config release
cmake --build .  --target install --config release
cmake --build .  --target install --config debug
popd
```
ここでビルドオプションを設定できます。
詳しくは`OpenCV configuration options reference`の項目で書いてある通りですが、量が多すぎるのでここでは割愛。余裕が出てきたらGPUアクセレーションの設定などをやってみたい。

シェルスクリプト実行後、次のようなファイル構成でビルドが完了。
![スクリーンショット 2021-11-05 234009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655595/ebb772dc-cc6f-34e1-34f8-da2b4b9ab661.png)

最後に、OpenCVの環境変数を設定。変数値については環境によって異なりますが、筆者は次のように設定。
変数名`OPENCV_DIR`、変数値`C:\lib\install\opencv\x64\vc16`

### How to build applications with OpenCV inside the "Microsoft Visual Studio"
ここではOpenCVを使ったアプリケーションのビルドを紹介します。


執筆中


<a id="#reference"></a>
# 参考文献
- [OpenCV 4.5.4 Tutorials](https://docs.opencv.org/4.5.4/d9/df8/tutorial_root.html)