ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

VC++でOpenCVを利用する

ビルド済みのOpenCVをインストールしてVisual StudioC++プロジェクトから利用してみます.

実行環境

項目 説明
OS Windows11
Visual Studio 2017
OpenCV(ビルド済み) 4.7.0

インストール

こちらのサイトを参考にしてWindows用のインストーラーをダウンロードし、手元で実行します. 管理者権限で実行し、インストール先は「C:\Program Files」 としました.

www.kkaneko.jp

インストール後dllファイルがあるフォルダへのパスを追加します. 私の場合は「C:\Program Files\opencv\build\x64\vc16\bin」を環境変数のパスに追加しました. dllのパスを追加したらWindowsを再起動しておきます.

Visual Studioで空のプロジェクト作成

C++の空のプロジェクトを作成し、適当なソースファイルを追加して次のコードを入力します. ソースコードは次の記事を参考にしました.

zenn.dev

#include <opencv2/opencv.hpp>

int main()
{
    // Windowsに最初から含まれている画像を指定
    cv::Mat img = cv::imread("C:/Windows/System32/DefaultAccountTile.png");

    // imgの表示
    cv::imshow("OpenCV Test", img);

    // キーが押されるまで待機
    cv::waitKey(0);

    return 0;
}

この時点ではまだエラーがたくさん出てしまいます. そのため、次の三点を設定する必要があります.

追加のインクルードディレクト

プロジェクトのプロパティから「C:\Program Files\opencv\build\include」を追加のインクルードディレクトリに加えます.

追加のインクルードディレクト

追加のライブラリディレクト

プロジェクトのプロパティから「C:\Program Files\opencv\build\x64\vc16\lib」を追加のライブラリディレクトリに加えます.

追加のライブラリディレクト

追加の依存ファイル

プロジェクトのプロパティから「opencv_world470.lib」を追加の依存ファイルに加えます.

追加の依存ファイル

ビルド&実行

ターゲットをx64のReleaseにし、ビルドして実行すると次のようなウインドウが表示されれば成功です.

実行結果

トラブルシューティング

プロジェクトプロパティの変更が反映されない

プロパティページはビルドターゲットごとにあるので、自分のビルド環境と合致している確認(よく分からなかったらx64のReleaseにしておく)

opencv.hpp以外のヘッダファイルが見つからない

追加のインクルードディレクトリを「C:\Program Files\opencv\build\include」ではなく「C:\Program Files\opencv\build\include\opencv2」にしている. 他のヘッダがopencv2を含んだパスで書かれているため.

opencv_world470.dllが見つからないため、コードの実行を続行できません

opencv_world470.dllへのパスを環境変数に追加したか確認. 具体的には「C:\Program Files\opencv\build\x64\vc16\bin」.

パスを追加したのにopencv_world470.dllが見つからないといわれる

Windowsを再起動する. パスが間違っていないか再度確認する.

モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'x86' と競合しています。

opencvはx64用なのに、x86をターゲットにビルドしているのが原因. x64用にビルドするか、x86用のOpenCVを自分でビルドする.

LNK2019: 未解決の外部シンボル "void __cdecl cv::ims ~~~ @@AEBV_InputArray@debug_build_guard@1@@Z) が関数 main で参照されました。

リンクしている.libファイルがReleaseビルド用なのにDebugビルドしようとしている. Releaseビルドをするかリンクするライブラリをopencv_world470d.libにする.