いわて駐在研究日誌2。

NEVER STAND BEHIND ME

OpenCV3.1.0+VS2015+Win10Pro

前から気になっていたOpenCVをいじってみようということで、とりあえずWebカメラのついている家PC(Win10Pro x86_64)に環境構築をトライしてみる。OpenCV3.1.0が年末に公開され、VS2015にも対応したとのことなので、C++の勉強もかねてVS2015 C++での開発を考えよう。

1.VS2015のダウンロード・インストール

MSから無償公開されているVS2015 Community版をダウンロード・インストール(vs

_community_JPN.exeを落としてきてダブルクリックし、ネットインストールすることになる。カスタムでインストールすると26GBくらい必要と表示された)。なお、インストール時に標準ではC#しか選択されないようなので、カスタムインストールでC++も選択しておく。2016/1現在で、VS2015 Update1が導入される。導入後はPCを再起動しておく。

f:id:waku2005:20160109133434p:plain

f:id:waku2005:20160109133439p:plain

 f:id:waku2005:20160109075659p:plain

 2.OpenCV 3.1.0のダウンロード・インストール

 ここからWindows用のOpenCV for Windows (opencv-3.1.0.exe)をダウンロードする。Githubから落としてくると早いかも。SFはミラーサイトにいきわたっていない?

http://opencv.org/downloads.html

自己解凍ファイル(exe)形式になっているので、ダブルクリックすると、opencvフォルダに展開されるので、フォルダごと適当な場所に置いておく。

今回は、バージョンがわかるようにopencv-3.1.0にリネームして、C:\Users\waku\opencv-3.1.0としておいておく。

なお、OpenCV3.0からAll-in-oneのライブラリ(C:\Users\waku\opencv-3.1.0\build\x64\vc14\lib\opencv_world310(d).lib)になったので、個別のlibが欲しい場合(2系列のように)やstaticライブラリが欲しい場合は、cmakeをつかってrebuildする必要があるとのこと。

3.Windows環境変数の設定

VS2015用動的ライブラリが置かれている場所は「C:\Users\Waku\opencv-3.1.0\build\x64\vc14\bin」であるので、これをWindowsのシステム環境変数PATHに追記する。環境変数は、システムのプロパティから設定できる。

4.VS2015での環境設定

 VS2015では、プロジェクトがOpenCVを認識できるようにOpenCVの「includeフォルダ」と「libraryフォルダ」を以下のようにして設定する必要がある。

  • まず、ファイル>新規作成>プロジェクトをクリックして、Win32コンソールアプリケーションの新しいプロジェクト(ここではプロジェクト名をOpenCV_Testとし、場所はc:\users\waku\documents\visual studio 2015\Projects)を作成する。
  •  次に、ビルド>構成マネージャーをクリックして、アクティブソリューションプラットフォームを「x86」から「x64」に変更する。debug/releaseはdebugのままとする。
  • ソリューション名”OpenCV_test”を右クリック>プロパティ>構成プロパティ>C/C++>全般を選択し、右側に出てくる設定画面に「追加のインクルードディレクトリ」が一番上にあるので、C:\Users\waku\opencv-3.1.0\build\includeを設定する(その下のopencv/opencv2までは不要)。
  • 同様にソリューション名”OpenCV_test”を右クリック>プロパティ>構成プロパティ>リンカ―>全般を選択し、右側の設定画面の中ほどにある追加のライブラリディレクトリにC:\Users\waku\opencv-3.1.0\build\x64\vc14\libを設定する。
  • 同様にソリューション名”OpenCV_test”を右クリック>プロパティ>構成プロパティ>リンカ―>入力を選択し、一番側の設定画面の中ほどにある追 加のライブラリディレクトリにopencv_world310(d).libを追記する。
  • http://chichimotsu.hateblo.jp/entry/2014/11/28/212432を参考に、opencv_libs.hppを作成し、上記のincludeフォルダに入れておく。

5.テストCoding

http://www.arubeh.com/archives/1102

にあったサンプルコードを以下のようにしてみた。

なお、各プロジェクトのプロパティから、構成プロパティ>C/C++>コード生成>「ランタイムライブラリ」をdebug/releaseに応じて変更する必要があるそうな。

Static Link

  • debugモードの場合:「マルチスレッドdebug(/MTd)」
  • releaseモードの場合:「マルチスレッド(/MT)」

Dynamic Link

  • debugモードの場合:「マルチスレッドdebugDLL(/MTd)」
  • releaseモードの場合:「マルチスレッドDLL(/MT)」

#include "stdafx.h"

// Dynamic Linkの場合
#include <opencv2/opencv.hpp> // インクルードファイル指定
//#include <opencv_libs.hpp> // 静的リンクライブラリの指定 (不要)

// Static Linkの場合
//#include <opencv2/opencv.hpp>
//#define _OPENCV_BUILD_STATIC_
//#include "opencv_libs.hpp"

using namespace cv; // 名前空間の指定

int main()
{
    //width220, height150の画像を作成
    Mat src = Mat::zeros(150, 220, CV_8UC3);

    //赤色で画像にHello Worldを描く
    putText(src, "Hello World", Point(5, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 0, 200), 2, CV_AA);

    //緑色で画像に線を描く
    line(src, Point(190, 25), Point(190, 45), Scalar(0, 200, 0), 3);

    //要素を直接操作し画像に点を描く
    for (int x = 188; x < 192; x++) {
        for (int y = 53; y < 57; y++) { // y座標
            for (int i = 0; i < 2; i++) { // i < 3にするとBGRすべての要素を200にする
                src.at<uchar>(Point(x * 3 + i, y)) = saturate_cast<uchar>(200);
            }
        }
    }

    //画像を表示
    imshow("", src);

    //ウインドウの表示時間(0はキーが押されるまで閉じない)
    waitKey(0);

    return 0;
}

 LINK : fatal error LNK1104: ファイル 'opencv_ts310d.lib' を開くことができません。となりエラーになる?

(以上、STOPです。Cmakeでビルドしなおせということか?)

 

(01/10追記)

いろいろ調べたところ、OpenCV3.1.0には個別のライブラリではなく、全部入りのopencv_world310(d).libだけがついてくるそうで、リンカの入力にこのライブラリを指定すればOK。また、

#include <opencv_libs.hpp>

のようなstatic libraryの指定も不要らしい..というか、そもそもstatic libraryがついてこないので、camekを使って自前でbuildしなければいけないらしい。

f:id:waku2005:20160110201223p:plain