【C++】Visual Studio 2022 で OpenCV 4.8.0 を使えるようにする

OpenCV を使うために、NuGet パッケージをインストールしたんですが、まったく使い物にならないので、GitHub からバイナリパッケージをダウンロードしてインストールする必要がありました。

Windows 11 Visual Studio 2022 OpenCV 4.8.0 環境ですが、ほぼこちらの記事の手順通りでビルドできました。
補足情報のみを本稿に記載します。

OpenCV 4.8.0 なので、opencv_world480.lib を使う

480 をダウンロードしたなら、480 以外のファイルはないと思いますが念のため。

構成 Debug の場合は opencv_world480d.lib を使う

Debug 構成の場合、追加の依存ファイルに指定するのは、d が付いている方の opencv_world480d.lib を指定します。
これを使わないとビルドが通りません。

Release には d が付いて「いない」方を指定します。

ソースコード
#include <opencv2/opencv.hpp>

int main()
{
	cv::Mat image = cv::imread("test.jpg");
	if (image.empty()) { return 1; }

	cv::imshow("test", image);
	cv::moveWindow("test", 0, 0);
	cv::waitKey(0);

	return 0;
}

test.jpg は .sln と同じフォルダにコピーします。
moveWindow でウィンドウの表示位置をスクリーン(モニタ)の左上に指定しています。
表示位置を指定しないと、ウィンドウが画面外に出てしまうことがあり、ウィンドウを移動できずに詰みます。

何故 OpenCV を使うのか?

ゲーム開発なら Unity か Unreal Engine を使っておけば良いのですが、ベクトルや行列の勉強をするときとか、サンプルコードを試したいときに、ログやプロンプトに数値だけ表示しても分かりにくいです。
なので、手軽に点を打ったり、線を引いたり、円を描いたりしたいのですが、Unity も UE も起動に時間がかかって面倒です。
(起動してしまえば、ギズモを使うなどやりようはありますが…。)

かと言って、DirectX や OpenGL を使うのも1から環境を用意するとなると面倒です。
C# か C++ か Python で楽に使えそうな描画ライブラリを探していて OpenCV を見つけました。

矢印をたった1つの関数で引くことができます。
超簡単です。

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/core/types.hpp>

int main()
{
	cv::Mat image = cv::imread("test.jpg");
	if (image.empty()) { return 1; }

	cv::arrowedLine(image, cv::Point(0, 0), cv::Point(100, 100), cv::Scalar(255, 0, 0), 10, 8);
	cv::arrowedLine(image, cv::Point(150, 150), cv::Point(400, 50), cv::Scalar(0, 255, 0), 2, cv::LINE_4);
	cv::arrowedLine(image, cv::Point(400, 300), cv::Point(200, 150), cv::Scalar(0, 0, 255), 4, cv::LINE_AA);

	cv::imshow("test", image);
	cv::moveWindow("test", 0, 0);
	cv::waitKey(0);

	return 0;
}

矢印の色は cv::Scalar で指定していますが、三原色の順番が左から BGR なので注意。

cv::Scalar(255, 0, 0) は R=0 G=0 B=255
cv::Scalar(0, 0, 255) は R=255 G=0 B=0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です