OpenCVの設定をテンプレート化する(visual studio 2017)

Visual studioでOpenCV3を利用するプログラムを作るときに、毎回リンカー等の設定が非常に面倒。ということでOpenCVを利用するプロジェクトの設定をテンプレート化した。これにより手動設定を必要とせずOpenCVを使用することができる。以降にこのテンプレート化手順を説明する。

#前準備
##openCVの導入
下記を参考に、OpenCVの環境を構築しておく(visual studio2017 x64用)。
https://qiita.com/tomochiii/items/fa26404ebc5fcd4481b9

導入時に上記に記載があるCMakeの設定でBUILD_opencv_worldにチェックを入れています。

私は、下記のフォルダ構成で環境構築をしています。
以降の文章中でに出てくるフォルダパスは、必要に応じて、読みかえてください。
C:\opencv\opencv3.4.2

また、システム環境変数のPathには、下記を設定しています。設定後にvisual studioの再起動が必要です。
C:\opencv\opencv3.4.2\build\x64\vc15\bin

#プロジェクトテンプレートの作成

1.　visual studioを起動する

2.　新規プロジェクトを、Windowsコンソールアプリケーションで作成する。このときプロジェクト名は「\$safeprojectname$」とする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259531/f85c88c1-fde8-af72-c441-ec1b5ff859fb.png)

3.　作成したプロジェクトを右クリックし、プロパティを開く

4.　構成が「すべての構成」、プラットフォームが「すべてのプラットフォーム」となっていることを確認する

5.　[C/C++]→[全般]をクリックし、[追加のインクルードディレクトリ]に下記を入力する
　C:\opencv\opencv3.4.2\build\include\
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259531/30ed45b0-ace2-62e0-d641-578d8cdee745.png)

6.　[C/C++]→[全般]をクリックし、[追加のライブラリディレクトリに]下記を入力する
　C:\opencv\opencv3.4.2\build\x64\vc15\lib
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259531/a5d6be65-a346-6ca2-2978-0e78f4391208.png)

7.　[適用]ボタンをクリックする

8.　cppファイルを下記の通りに修正する。
　Debug版か、Release版かにより、リンクするlibを切り替えるマクロを追加しています。

```.cpp
#include "stdafx.h"
#ifdef _DEBUG
#define LIB_EXT "d.lib"
#else
#define LIB_EXT ".lib"
#endif // _DEBUG

#pragma comment(lib,"opencv_world342" LIB_EXT)
#include "opencv2\core\core.hpp"

int main()
{
    return 0;
}
```

　ソースコードにマクロを書きたくない場合は、プロジェクトのプロパティ設定に下記を追加することで切り替えることもできます。

　・構成を「Debug」に変更し、[リンカー]→[入力]→[追加の依存ファイル]の順にクリックし、
　　opencv_world342d.libを追加する。
　・構成を「Release」に変更し、[リンカー]→[入力]→[追加の依存ファイル]の順にクリックし、
　　opencv_world342.libを追加する。

9.　ビルドが通ることを確認する

10.　[プロジェクト]→[テンプレートのエクスポート]をクリックする

11.　[プロジェクトテンプレート]を選択し、[次へ]をクリックする　

12.　[テンプレートを自動的に　Visual Studioにインポート]をチェックし、[完了]をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/259531/62e6ee5b-1f59-5246-bef8-ddf3b09bf167.png)

visual studio 2017 version15.8のバグフィックスにより、下記の13～19の手順は不要となった。
(https://developercommunity.visualstudio.com/content/problem/41749/export-projcet-does-not-work.html)
~~13.　エクスプローラでテンプレートの出力先である下記のパスを開く
「C:\Users\{ユーザ名}\Documents\Visual Studio 2017\My Exported Templates」~~

~~14.　出力されたテンプレートのzipを解凍する　~~

~~15.　解凍してできるフォルダ内のMyTemplate.vstemplateをテキストエディタで開く~~

~~16.　\</Project>の直前に以下を追記する~~
　　　~~\<ProjectItem ReplaceParameters="false" TargetFileName="main.cpp">main.cpp</ProjectItem>
　　　\<ProjectItem ReplaceParameters="false" TargetFileName="stdafx.cpp">stdafx.cpp</ProjectItem>
　　　\<ProjectItem ReplaceParameters="false" TargetFileName="stdafx.h">stdafx.h</ProjectItem>
　　　\<ProjectItem ReplaceParameters="false" TargetFileName="targetver.h">targetver.h</ProjectItem>~~

~~17.　解凍したフォルダ内に、上記手順2で作成したプロジェクトの以下のファイルをコピーする
　　　main.cpp
　　　stdafx.cpp
　　　stdafx.h
　　　targetver.h~~

~~18.　解凍したフォルダをzipに圧縮する(zip後にフォルダ構成が変わらないように注意)。~~

~~19.zipに圧縮し直した、エクスポートしたテンプレートを下記にコピーする
「C:\Users\{ユーザ名}\Documents\Visual Studio 2017\Templates\ProjectTemplates」~~


#プロジェクトテンプレートの読み込み
1.　visual studioを起動する

2.　[ファイル]→[新規作成]→[プロジェクト]をクリックする

3.　エクスポートしたプロジェクトテンプレートを選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/259531/fad12035-06d5-2c59-b7a6-56909f7b7a28.png)

4.　新規プロジェクトの名前、場所を入力し、[OK]をクリックする

テンプレートの設定が新規プロジェクトに反映される。

**これでお決まりの煩わしいプロパティ設定から、開放される。**