なんかPCにインストールされているような気配のあるOpenCVを久しぶりに使ってみることにした。
とりあえず簡単なサンプルコードを用意して、空のプロジェクトでビルドしてみた。
※MFCなプロジェクトでテストするときは、GUIのソースディレクトリで以下のmainをtest()に変えたものを配置してプロジェクトの設定をテストするとよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#include "stdafx.h" ・// VisualStudioなので。 #include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <iostream> int main(int argc, const char* argv[]) { cv::Mat src = cv::imread("test.jpg", cv::IMREAD_COLOR); if (src.empty()) { std::cerr << "Failed to open image file." << std::endl; return -1; } cv::namedWindow("image", cv::WINDOW_AUTOSIZE); cv::imshow("image", src); cv::waitKey(0); cv::destroyAllWindows(); return 0; } |
もちろん、エラーが出た
1>c:\users\watashi\documents\visual studio 2015\projects\cvtest\cvtest\cvtest.cpp(6): fatal error C1083: include ファイルを開けません。’opencv2/core.hpp’:No such file or directory
該当ファイルがどこにあるか探してみると、以下に見つかった。
C:\opencv\build\include\opencv2
以下をインクルードパスに追加する。
メニューから[プロジェクト]→[プロパティ]
以下、[構成プロパティ][VC++ディレクトリ][インクルードディレクトリ]
追加 C:\opencv\build\include\
再ビルド、もちろんエラーがでる。ライブラリのディレクトリを設定していないから当然だ。
1>cvtest.obj : error LNK2019: 未解決の外部シンボル “void __cdecl cv::fastFree(void *)” (?fastFree@cv@@YAXPAX@Z) が関数 “public: __thiscall cv::Mat::~Mat(void)” (??1Mat@cv@@QAE@XZ) で参照されました。
(中略)
: fatal error LNK1120: 9 件の未解決の外部参照
ライブラリはここにあった。
C:\opencv\build\x64\vc14\lib
メニューから[プロジェクト]→[プロパティ]
以下、[構成プロパティ][VC++ディレクトリ][ライブラリディレクトリ]
これを先ほどと同じようにライブラリディレクトリに追加した。さらに、リンカの入力に、release: opencv_world330.lib debug: opencv_world330d.libを追加した。
メニューから[プロジェクト]→[プロパティ]
以下、[リンカー][入力][追加の依存ファイル]
ここに追加する。releaseとdebugでファイル名を変えると、デバッグ情報が使える。
releaseとdebugのプロジェクトは両方同時にプロジェクト設定をこなしておくべき、無精すると結局苦労することになる。
ビルドできた。と思いきや、
1>opencv_world330d.lib(opencv_world330d.dll) : fatal error LNK1112: モジュールのコンピューターの種類 ‘x64’ は対象コンピューターの種類 ‘X86’ と競合しています。
くそったれめ!一生懸命設定したのにプラットフォームがwin32になっていた。x64に変えてもう一度上記作業を行い、設定完了。
dllのパスを設定する必要があるかもしれない、面倒ならWindowsフォルダへコピペしちゃえ。