OpenCV を使うために、NuGet パッケージをインストールしたんですが、まったく使い物にならないので、GitHub からバイナリパッケージをダウンロードしてインストールする必要がありました。
Windows 11 Visual Studio 2022 OpenCV 4.8.0 環境ですが、ほぼこちらの記事の手順通りでビルドできました。
補足情報のみを本稿に記載します。
480 をダウンロードしたなら、480 以外のファイルはないと思いますが念のため。
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 でウィンドウの表示位置をスクリーン(モニタ)の左上に指定しています。
表示位置を指定しないと、ウィンドウが画面外に出てしまうことがあり、ウィンドウを移動できずに詰みます。
ゲーム開発なら 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