【VSCode】OpenCV C++のための環境構築
目標
- Visual Studio Codeで、OpenCVのC++サンプルプログラムを実行する
- Visual Studio Codeで、オリジナルのOpenCV C++プログラムを作成して実行する
環境
筆者が使用している環境は以下の通りです。
- OS:Windows 11
- ビルドツール:CMake (version 3.29.5)
- C++コンパイラ:cl (Visual Studio Build Tools 2022) (version 17.10.2)
単純に操作感が好みじゃないので、Visual Studioのエディターは使いません。
手順については、GitHubからソースコードをダウンロードし、適宜ビルドして用いる方法について解説します。
インストーラでダウンロードし、環境変数を設定したりエディターの設定を編集して用いる方法はその他書籍や記事で解説されていると思うので割愛します。
手順
1.OpenCVソースコードのダウンロード
- GitHub CLI導入済みの場合
作業や一時使用などのための目的のディレクトリに移動し、VScodeのターミナルにて以下を実行gh repo clone opencv/opencv
- Gitを用いない場合
GitHub Releasesより、Source code (zip)
をダウンロード。その後目的のディレクトリにてzipファイルを展開し、VScodeで確認。
2.CMakeのインストール
ダウンロードした多くのファイルの中に、CMakeLists.txt
という名前のファイルが確認できるでしょうか。このファイルは、CMake
*1を用いて、今後サンプルや自身が作成するソースファイルをビルドする際に必須のものです。
リンクより、Latest Release (3.29.5)のWindows x64 Installerをダウンロードします。
インストーラを起動したら、表示に従ってインストールを進めてください。途中以下の表示が出ますが、3つの選択肢のうち、下の2つのいずれかを選択してください。
インストールが完了したら、VScodeのターミナルで以下を実行します。
cmake --version
バージョンが表示されたら成功です。
*1 ビルドツールの一種。「ヘッダやライブラリをどのディレクトリから探してくるのか、どのファイルをソースファイルとするのか、どんな形式のファイルをビルドしたいのか」といった”ルール”を
CMakeLists.txt
というファイルに記述することで、ソースファイル群の分割コンパイルが一斉に実行され、目的のライブラリや実行可能ファイルをビルドすることができる。
Visual Studio Build Tools 2022 のインストール
リンクより、ダウンロードを選択してインストーラをダウンロードします。
インストーラを起動したら表示に従ってインストールを進めます。
こちらの記事が詳しいので、必要な方は手順を参考にしてください。
インストールが終了したら、windowsスタートメニューでDeveloper Command Prompt for VS 2022
と検索し、起動します。
where cl
と実行して、パスが表示されることを確認してください。
OpenCVソースコードおよびサンプルのビルド
ソースコードのビルド
GitHubよりインストールしたOpenCVソースコードのディレクトリopencv
に移動し、下記を実行します。
mkdir build
cmake -S . -B build
ビルド時の生成ファイルを吐き出す先として
mkdir
ディレクトリを作成、-S
オプションの後にCMakeLists.txtのパスを指定(今回は同ディレクトリなのでピリオド)、-B
オプションの後に生成ファイルの格納先(先ほど作成したbuild
)のパスを指定しています。
より詳しくするならば-G "Visual Studio 17 2022"
という指定を書きますが、デフォルトでVisual Studioのコンパイラを使うことになっているので特別指定は必要ありません。
実行すると表示がたくさん出ます。
最終的にBuild files have been written to:
の表示が出ることを必ず確認してください。
次に以下を実行します。
cmake --build build
--buildオプションの後に、先ほどのコマンド実行の際に指定した生成ファイルの格納先ディレクトリのパスを指定します。
これもまたたくさん表示が出ます。先ほどよりも多くの時間がかかると思います。
途中で黄色の警告表示が出るかもしれませんが、失敗の旨を告げる警告が最後に表示されなければ問題ないと思います。
サンプルのビルド
opencv/samples/cpp/example_cmake
に移動し、先ほどと同じ要領で以下を実行します。
mkdir build
cmake -S . -B build
おそらく下記のエラーが出ます
そこでCMakeLists.txt
の7行目に以下を追記します。CMakeはバックスラッシュ\
に対応していないので、通常のスラッシュ/
を用いてください
set(OpenCV_DIR path/to/opencv/build)
再度ビルドシステムの構築を行いますが、先ほどの生成ファイルは一度削除してから同じ手順を踏みます。以下を実行しましょう。
rm -r build
mkdir build
cmake -S . -B build
Generating done
, Build files have been written to
の表示が出れば成功です。
次に以下を実行します。
cmake --build build
build/Debug
ディレクトリにてopencv_example.exe
が生成されていたら成功です。
サンプルの実行
先ほどのディレクトリにて以下を実行します。
start build/Debug/opencv_example
が、おそらく以下のエラーが出ます。
CMakeはtarget_link_libaries()
関数でビルド時にリンクするライブラリを指定することはできますが、実行時のdll(dynamic link library)の依存関係までは扱っていないためです。
ここだけは環境変数を設定します。下記パスをPATH
に登録します。
path/to/opencv/build/bin/Debug
環境変数へのパス登録を反映させるためvscodeを再起動し、もう一度サンプルを実行します。
cd path/to/sampels/cpp/example_cmake
build/Debug/opencv_example
プライバシーのため顔を隠しています
これで最初の目標を達成しました。
オリジナルのプログラムを作成して実行する
自分の場合は以下の手順をを踏みます。
1.プロジェクトのためのフォルダ作成
2.CMakeLists.txtの作成
3.ソースファイルの作成
今回は、ウェブカメラからの映像取得を行う基本的なプログラムを作成します。
作成したCMakeLists.txtファイルとソースファイルは以下の通りです。
-
CMakeLists.txt
cmake_minimum_required(VERSION 3.1) project(example_basicWebcam) set(OpenCV_DIR C:/Users/<username>/vscode/Study/OpenCV/opencv/build) find_package(OpenCV REQUIRED) add_executable(basicWebcam basicWebcam.cpp) target_link_libraries(basicWebcam PRIVATE ${OpenCV_LIBS})
-
basicWebcam.cpp (ソースファイル)
#include <iostream> #include <opencv2/core.hpp> #include <opencv2/videoio.hpp> #include <opencv2/highgui.hpp> int main() { // open video capture device cv::VideoCapture cap(0); // check the device has already initialized if (!cap.isOpened()) { std::cout << "camera is not opened" << std::endl; return -1; } // set capture settings cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1080); cap.set(cv::CAP_PROP_FPS, 60); // create Mat array to store image cv::Mat img; // create window to show capture image cv::namedWindow("window name", cv::WINDOW_AUTOSIZE); // capture while (true) { cap >> img; if (img.empty()) break; cv::imshow("window name", img); // escape if (cv::waitKey(1) >= 0) // when any key pressed break; } // end capture cv::destroyAllWindows(); return 0; }
それではビルドしていきます。
cd path/to/project directory
mkdir build
cmake -S . -B build
cmake --build build
成功したらbuild/Debug/basicWebcam
で実行します。
先ほどよりも綺麗な映像が表示されるかと思います。
Discussion