OpenCV4.1.0をCMakeを使って導入する方法(Visual Studio 2019)

#概要
OpenCVをCMakeを使用してインストールする方法をまとめました。
この手順を理解しておくとWindowsでのあらゆる環境構築が怖くなくなります。(たぶん)
#実行環境
- Windows10
- [Visual Studio 2019](https://visualstudio.microsoft.com/ja/vs/)
- [CMake 3.15.0](https://cmake.org/download/)
- [OpenCV 4.1.0](https://github.com/opencv/opencv)

#インストール＆ビルド
###Visual Studio
下記からダウンロード＆インストールします。
https://visualstudio.microsoft.com/ja/vs/
###CMake
下記からダウンロード＆インストールします。
GUIを使用してMakeするので.msiをダウンロードします。
https://cmake.org/download/
![cmake.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/3d4cdfd5-4fe0-391c-6f36-6a1b1f367faa.png)
###OpenCV
1. 下記Gitからバージョンを確認して.zipダウンロードします。
任意の場所に展開します。(Cドライブの直下にProgramingLibraryというDIRを作成しその中に入れました。)
https://github.com/opencv/opencv
![opencv.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/6aa05bbc-813a-f730-0e6e-bcff53bebfed.png)

2. CMake(GUI)を起動し、OpenCVのDIR PATHを設定します。
.slnファイルを出力するPATHを設定します。
(私の場合はライブラリの直下にbuildというフォルダを出力するという自分ルールがあるため**C:\ProgramingLibrary\opencv-4.1.0\build**というPATHになっています。)
![cmake-.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/45820413-6f34-5f52-d28c-7da520fbaf75.png)
3. Config、Generateの順で実行します。
今回はVisual Studio 2019でのビルドなので**Visual Studio 16 2019**を選択し、x64と設定します。
![cmake.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/a34bc282-9a9b-188f-670b-16e86d93b340.png)

4. 設定したパスに出力された.slnをVisual Studioで開きます。
出力したい実行環境になっていることを確認します。(今回はx64 Release)
![build.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/abc866b9-b6b1-704b-a4ea-47335b6e67ad.png)
5. ALL_BUILDを右クリックしてビルド
![bs.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/af4ebb55-301b-be35-3ce4-6f1072522f6c.png)
6. INSTALLを右クリックしてビルド
![ins.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/c74689e8-dd34-9869-b1c7-7cfb92a88678.png)
7. build以下にinstall DIRができていて、中身も生成されていることを確認します。
![ins_dir.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/9414923e-f46a-9e61-f8ad-a01e4e6593c4.png)
###パスを通す
#####CMAKE_PREFIX_PATH
システム環境変数から下記画像のようにOpenCVConfig.cmakeがあるDIRのPATHを通します。
![prefix.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439748/74577a42-1535-ec8d-cc8a-f5e3540e04be.png)
#####PATH
PATHに.dllファイルが出力されているDIRのPATHを通す。
**このDIRは定期的に変わるので注意です。**
#サンプルプログラム
画像が読み込んで表示するプログラムです。
任意の場所にDIRを作成し、DIRの中に下記プログラムと任意の画像(**.jpg**)を入れます。

```CMake:CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME Test)
project(${PROJECT_NAME})

find_package(OpenCV 4.1.0 EXACT REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${OpenCV_LIBRARY_DIRS})

file(GLOB SOURCE_CPP *.cpp)
file(GLOB SOURCE_H *.h)

add_executable(${PROJECT_NAME} ${SOURCE_CPP} ${SOURCE_H})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
```

```C++:main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>

void main(){

	std::string pattern = "..\\*.jpg";
	std::vector<cv::String> files;
	cv::glob(pattern, files);
	
	if(files.size() == 0) {
		std::cout << "erorr" <<std::endl;
		exit(-1);	
	}
	
	cv::Mat image = cv::imread(files[0]);
	std::cout << files[0] << std::endl;
	std::cout << image.size () << std::endl;
	cv::imshow("show", image);
	cv::waitKey (0);
}
```
2. 上記同様にCMakeでmakeする。
3. Generateされた.slnをVSで開く。
4. 実行環境が合っていることを確認して実行  
(プロジェクト名が非アクティブの場合はプロジェクト名を右クリックして**スタートアッププロジェクトに設定**でアクティブにする。)する。
5. 画像が読み込まれて表示されるプログラム完成

#OpenCV contribの導入

https://qiita.com/sanishi_pompom/items/5191aeca8d6de3e98595

#まとめ
CMake(GUI)を使えばコマンドラインからは分かりにくい設定も分かりやすいです。
もう環境構築怖くない～