windowsでopencv3.0の設定をした
opencv3.0では物体追跡や三次元点群の関数が準備されてるということで、以下の環境でopencv3.0を使えるようにしてみた。
opencv3.0をダウンロード
まず、opencvのサイト
http://opencv.org/downloads.html
からopencv3.0をダウンロードします。で、opencv本体をこんな感じにC:\opencvとして直下に移動させとく。
今回ハマったこと
本来ならこの後、インクルードディレクトリ、リンカの設定をすればいいのだがC:\opencv\build\x64\vc12\libの中にあるはずのopencv_core300d.libなどのライブラリファイルなく、代わりにC:\opencv\build\x64\vc12\staticlib
の中にあった。
そこで、よくわからないままにリンカの設定C:\opencv\build\x64\vc12\staticlibとして、やっていみるがパスが通ってないのか、エラーが出まくる。
調べてみると、opencv3.0-alpha版などの場合、staticなライブラリファイルしか用意されてないため、opencvをcmakeを使って自分でビルドしてやる必要があるらしい。
cmakeをダウンロード
https://cmake.org/download/のcmake-3.4.0-win32-x86.exeをポチってインストールしcmake-gui.exeを起動する。
opencvをビルド
作業場所としてC:\opencv\workなるフォルダをつくっておいて
ソースの場所をC:\opencv\sources
バイナリの場所をC:\opencv\workと指定する。
configureボタンを押すとコンパイラの選択画面がでてくるので、Visual Stadio 12 2013 Win63を選択する。
赤く表示されて焦るが気にせず、Generateボタンを押す。
完了するとC:\opencv\workの中にvisual stadio のプロジェクトができているので、workの中のOpenCV.slnをポチってvisual studioを起動する。
Debug x64になっていることを確認(なってなかったら選び直して)してビルドをポチる。このままではC:\opencv\work\にinstallが生成されないので、さらにソリューションエクスプローラの中にあるINSTALLを右クリックして、ビルドを押す。
完了するとC:\opencv\work\installが生成されており、辿っていくとC:\opencv\work\install\x64\vc12/libの中にopencv_core300d.libなどが生成されていることが確認できる。この.libのファイルをすべてコピーしてC:\opencv\build\x64\vc12\libの中に張り付ければ完了である。
プロパティシートを使ったvisual stadioでの設定
visual stadio を起動しプロジェクトをたてる。表示>その他のウィンドウ>プロパティーマネージャを押す。
レンチのマークを押して、opencv30.propsなどの名前のプロパティシートを作成する。ここで、atinfinityさんが作ってくれてりるプロパティシートを使用する。
https://gist.github.com/atinfinity/ec2fc0f36741193d5d0b
コピーして貼り付ける。ここで、最上部のディレクトリのところを赤字のように編集して保存する。
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<OPENCV_INSTALL_DIR>C:\opencv\build</OPENCV_INSTALL_DIR>
</PropertyGroup>
プログラムの実行
ソリューションエクスプローラに戻って、ソースファイルを右クリックして追加>新しい項目をクリックして、source.cppをつくる。
以下のサンプルコードをコピペして、ビルド、デバックして動けば完了。
#include <opencv2/core/core.hpp> // coreモジュールのヘッダーをインクルード
#include <opencv2/highgui/highgui.hpp> // highguiモジュールのヘッダーをインクルード
#include <iostream>
int main(int argc, const char* argv[])
{
// 1幅320px、高さ240pxで赤色の画像データを生成
cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
// 2画像表示用のウィンドウを生成
cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
// 3ウィンドウに画像を表示
cv::imshow("red", redImg);
// 4キー入力を待機
cv::waitKey(0);
// 5作成したウィンドウを全て破棄
cv::destroyAllWindows();
return 0;
}