Visual Studio と OpenCV で画像処理をする[インストールから画像表示まで]

#1. はじめに
Visual Studio の環境構築ってめんどくさいですよね。
著者はこれまで画像処理は、VSCode を使って Python で行なってました。
ただ、ロボットへの実装やらリアルタイム対応やらで Python では処理が追いつかず…。
そろそろ C++ に移行する時期だなと物思いにふけって記事を投稿する運びになりました。
ということで、Visual Studio のインストールから OpenCV の導入までをササッと解説します。

流れは以下のとおりです。

* Visual Studio のインストール
* C++ の動作確認
* OpenCV のダウンロード
* Visual Studio で OpenCV を使う
* Let's enjoy 画像処理ライフ

#2. Visual Studio のインストール
OpenCV の拡張機能を入れるのであれば「Visual Studio 2019」、
そうでなければ「Visual Studio 2022」をダウンロードしてください。
ちなみにどちらも「Visual Studio 〇〇 Community」を選択してください。

[Visual Studio 2019 はここから](https://docs.microsoft.com/ja-jp/visualstudio/releases/2019/release-notes)
[Visual Studio 2022 はここから](https://visualstudio.microsoft.com/ja/)

ダウンロードできたら、ファイルをクリックして少し待ちます。
以下の画像までいったら、[C++ によるデスクトップ開発] にチェックをいれてインストールします。
容量を 8.5GB も使うので、できればデスクトップでやるべきですね。

![VisualStudioMenu.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/2a4ec7c6-f58c-b067-b029-66df249b12ab.png)

ここまでは簡単ですよね。インストールまで気長にお茶でも飲んで待ちましょう。
ちなみに筆者は「Visual Studio 2019 Community」で色々やっています。

#3. C++ の動作確認
入っていると分かっていても、ちゃんと動作するかは見ておきましょう。
まずは下の画像のようにプロジェクトを作ってみましょう。

![VisualStudio_Start_Image.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/7dc342c9-29c3-73b3-20d0-009497087ff6.png)
![VisualStudio_Start_Image2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/8c098757-9789-ebcf-485c-62d3ea7720ec.png)
![VisualStudio_Start_Image3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/43b63a79-6368-fd4e-a7f7-a69a06e96fd6.png)

ここまでできると、以下のような「Hello World!」が出力されるプログラムが作成されるので、さっそく実行してみましょう。
![VisualStudio_Start_Image4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/704be675-c1ea-f32b-d28c-285c86248b0f.png)
![Result.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/a13996af-267e-1cb6-8c86-55b84d9713c3.png)


#4. OpenCV のダウンロード
次に OpenCV をダウンロードします。
まずは以下のサイトにアクセスして、ダウンロードします。2021/11/14 時点ではバージョン 4.5.4 が最新だったので、それをダウンロードしています。

[OpenCV ダウンロード先はここ](https://opencv.org/releases/)

![OpenCV_page.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/7ebceed9-1623-3293-0279-14b826815aa7.png)

ダウンロードができたらファイルをクリックし、展開先を以下のように変更しておきます。
![OpenCV_extract.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/7790462f-8c59-ea5e-ae0d-fe7df03b8fc6.png)

展開できたら、次はパスを通します。
これは OpenCV の実行ファイルがここにあるよ～っていうことを教えてあげる作業です。
Windows の検索機能で「環境変数」を入力して検索すると、以下の画面が出てくると思うので、
画像の順番でパスを通してあげましょう。

![Environment_variable1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/5458e32b-1e35-268d-9f54-ea0623a76f67.png)
![Environment_variable2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/e801e71b-5447-1d88-72e0-1f3e4a53452c.png)
![Environment_variable3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/51d120f6-519a-db7f-4fd7-040f6886387c.png)

ここまでできたらあともう一歩です。次の節で何かおかしいことが起きれば、
この節のことができていない可能性があるので見返してみましょう。

#5. Visual Studio で OpenCV を使う
さて、本格的に C++ で OpenCV を使ってコードをバリバリ書くぜ … といきたいところですが、まだちょっと設定することがあります。
一度、作成した C++ ファイルの先頭に以下を書いてみてください。
おそらく「ソースファイルが開けません」と出てくるはずです。

```
#include <opencv2/opencv.hpp>
```

これを解決するために、インクルードファイルがあるフォルダを
Visual Studio 側で追加してやる必要があるので、その設定について解説します。
まず、上部のタブの中から [デバック] → [〇〇のプロパティ] をクリックすると以下の画面が出ます。
そこから以下の画像の手順で、インクルードディレクトリとライブラリディレクトリを追加します。
ディレクトリは、OpenCV を展開したファイルを辿って、画像のところまできたらパスをコピペすると簡単です。

[C/C++] → [全般] → [追加のインク―ルドディレクトリ] を選択して編集。
構成とプラットフォームも画像のようにあっているかを確認してみてください。
![Setup_include_file2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/de3d3769-7313-6135-42f2-48c6dc5426f1.png)
ダブルクリックすると、文字が打てるようになるので、コピーしたディレクトリのパス名をペースト。
![Setup_include_file4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/e7fa1710-5154-b38d-fb4d-c9f98e56e41f.png)
ライブラリディレクトリに関しても同様。
[リンカー] → [全般] → [追加のライブラリディレクトリ] を選択して編集。
![Setup_include_file3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/e885ed8a-d0ba-161c-d719-24946668821d.png)
![Setup_include_file5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/6277fb80-9a40-af5d-4c06-cb92cfc9eceb.png)


これで [適用] を押すと、先ほど出ていたエラーがなくなるはずです。
もしまだエラーが出ているならどこかが間違っているので見直してみましょう。

#6. Let's enjoy 画像処理ライフ
入門編として画像を表示してみましょう。
以下の画像ファイルをデスクトップの直下に保存してください。
[lena さんの画像(なぜか画像処理でよく使用される)](http://optipng.sourceforge.net/pngtech/img/lena.html)

では、以下のコードを試してみましょう。
ライブラリの名前や、自身のデスクトップのディレクトリなどは適宜変更してください。

```Test.cpp
#include <iostream>
#include <opencv2/opencv.hpp>

// OpenCV のバージョンが違うなら名前は 454 の部分を自身のものに変更する
#ifdef _DEBUG
#pragma comment(lib, "opencv_world454d.lib")
#else
#pragma comment(lib, "opencv_world454.lib")
#endif

int main()
{
	// 表示するときのウィンドウ名
	const char* windowName = "image";

	// ユーザーの名前は自分のものに変更してください
	cv::Mat img = cv::imread("C:\\Users\\kairi\\Desktop\\lena.png");
	cv::imshow(windowName, img);

	cv::waitKey(0);

	return 0;
}
```

無事、以下のように出力されれば終了です。Let's enjoy 画像処理！
![Result2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576581/9b62da9c-cb36-197d-fdeb-ad20ef26951c.png)

# エラーが出たら
プログラム段階でエラーが出た場合は以下を確認 & 試してみてください。

+ デバックボタン横のプラットフォームが (x64) になっているか確認する。
+ 例外スルーでプログラムが止まるときは、「ストップする」のチェックボックスを外す。

その他、追記あれば書き足していきます。

# 最後に
無事に出力できれば色々処理を試してみてください。
画像のサイズを変更したり、色を変えたり …。
OpenCV は色々処理があるので、勉強のまとめとしてそのあたりも記事が書いていけたらなと。
拙い文章でしたが、最後まで読んでいただきありがとうございました！