読者です 読者をやめる 読者になる 読者になる

可変ブログ

色々メモとか。とりあえず自分が分かるように。その後、なるべく人が見て分かるように。可変。

OpenCV3.2とcontribをWin10に導入してビルドしてサンプル実行。

 Win10にOpenCV3.2を導入します。基本的に導入方法はどのバージョンでも同じだと思います。


環境



流れ

  • Visual Studio Community 2015をインストールする。
  • Cmakeをインストールする。
  • OpenCV3.2のソースをダウンロードする。
  • OpenCV3.2のcontribのソースをダウンロードする。
  • Cmakeを使って自分の環境にあったOpenCVのソースを作る。
  • Visual Studioを使ってソースをビルドする。
  • ビルドしてできたDLLのパスを通して、ヘッダーとライブラリをVisual Studioで指定する。
  • サンプルプログラムをビルドする。



Visual Studio Community 2015をインストールする。

Visual Studioの公式サイトからインストーラをダウンロードして、インストールします。
インストールの方法は特に変わったことはありません。インストーラに従ってインストールしてください。


Cmakeをインストールする。

公式サイトから自分環境にあったzipをダウンロードします。
これは特にインストールとか必要なく、解凍するだけでOKです。


OpenCV3.2のソースをダウンロードする。

OpenCVの公式サイトから3.2のWindow版をダウンロードします。
OpenCVGitHubからダウンロードしても同じだと思っていたのですが、うまくいかなかったので公式サイトからダウンロードしましょう。
ダウンロードしたら解凍して、適当な場所に置きます。置く場所はどこでもいいです。(多分)
今回はCドライブの直下に置いてフォルダ名をopencv320に変えておきます。


OpenCV3.2のcontribのソースをダウンロードする。

contribのソースはGitHubからダウンロードします。

ここのサイトから

opencv_contrib → release → 3.2.0と飛んで、

Source code (zip)をクリックしてダウンロードします。
ダウンロードしたら解凍して、適当な場所に置きます。置く場所はどこでもいいです。(多分)
今回はCドライブの直下に置いてフォルダ名をopencv_contrib320に変えておきます。


Cmakeを使って自分の環境にあったOpenCVのソースを作る。

Cmakeを解凍したフォルダの中のbinフォルダのcmake-gui.exeを実行します。
そしたら、Where is the source code:の欄にダウンロードしたOpenCVのソースを指定します。
今回は

C:/opencv320/sources

となります。
その下の欄のWhere to build the binaries:には

C:/opencv320/build

と入力します。これはビルドされるバイナリが保存される場所になります。
その後、Configureをクリックします。
コンパイラ環境を聞かれると思うのでVisual Studio 2015を選びます。86と付いているのは32bit版で何もついてないのは64bit版です。
すると、赤くずらずらと出てきます。
これはどういう風にOpenCVをインストールするかといったオプションです。(多分)
まず、Pythonは入っていないのでPython関係のチェックを外します。
NvidiaGPUも積んでないのでWITH_CUDAのチェックを外します。
それと何故かBUILD_opencv_hdfにチェックが入っているとビルドで失敗するのでチェックを外す。
contribのフォルダを指定します。OPENCV_EXTRA_MODULES_PATHに以下を指定します。

C:/opencv_contrib320/modules

そしたら再びConfigureを押します。
その後Generateをクリックします。
すると、自分の環境にあったソースのソリューションファイルが生成されます。


Visual Studioを使ってソースをビルドする。

CmakeのOpen Projectボタンを押すか、もしくはC:/opencv320/buildの中に生成されているOpenCV.slnをVisual Studioで開きます。
メニューバーのビルドを押してバッチビルドを選択します。そしたら、INSTALLをDebugとReleaseのどちらもチェックしてビルドボタンを押す。
ビルドが終わるのをしばらく待ってエラーなく終了したら成功です。


ビルドしてできたDLLのパスを通して、ヘッダーとライブラリをVisual Studioで指定する。

ビルドして生成されたもので本当に必要なのは3種類です。(多分)
『ヘッダファイル』(拡張子.hpp)と『ライブラリファイル』(拡張子.lib)と『ダイナミックリンクライブラリ』(拡張子.dll)の3つです。
それ以外のファイルはダウンロードしたものを含めて全て削除しても多分大丈夫です。(サンプルプログラムとかサンプルコードは別として)
ヘッダファイルはOpenCVに使われている関数とかの定義が書いてあるファイル。(多分)
ライブラリファイルは関数とかの内容が書かれているファイル。(多分)
ダイナミックリンクライブラリはOpenCVでビルドされたプログラムを実行するときに一緒に実行されるファイル。(多分)
つまり、ビルド時にはヘッダファイルとライブラリファイルが必要で、実行時にはダイナミックリンクライブラリが必要になります。(多分)
この3つのファイルをうまく配置指定してやる必要があります。

ダイナミックリンクライブラリのパスを通す。

ダイナミックリンクライブラリはC:/opencv320/build/install/binの中に有ります。プログラムを実行するのはWindowsなのでこのフォルダをWindowsに教えてやる必要があります。
Windowsのスタートボタンを右クリックしてシステムを選択します。
左の欄のシステムの詳細設定をクリック。詳細設定のタブの一番下の環境変数をクリック。
システムの環境変数の中のPathを選択して編集を押します。
新規を押して、

C:/opencv320/build/install/bin

と入力してOK。パソコンを再起動します。

もう一つの方法として、C:/opencv320/build/install/binの中にある.dllのファイルを
64bitでビルドしたならC:\Windows\System32に
32bitでビルドしたならC:\Windows\SysWOW64に
コピーしても良いようです。

ヘッダファイルの指定

ヘッダファイルはC:/opencv320/build/install/includeの中に有ります。プログラムをビルドするのはVisual StudioなのでこのフォルダをVisual Studioに教えてやる必要があります。
まずVisual Studioで適当なプロジェクトを作成します。
ファイル → 新規作成 → プロジェクト
Visual C++で空のプロジェクトを選んで名前を適当付けます。今回はopencv-testとします。
そしたらソリューションエクスプローラーの欄でopencv-testを右クリックしてプロパティを選択します。
構成ですべての構成を選んでC/C++を選択します。追加のインクルードディレクトリに以下を追加します。

C:/opencv320/build/install/include

ライブラリファイルの指定

ヘッダファイルはC:/opencv320/build/install/libの中に有ります。プログラムをビルドするのはVisual StudioなのでこのフォルダをVisual Studioに教えてやる必要があります。
ライブラリファイルの指定はコード上に書いて指定することができます。
面倒なので全てのライブラリを指定します。
コードの一番上に以下のように記述します。

#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_aruco320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_bgsegm320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_calib3d320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ccalib320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_core320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_datasets320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dnn320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dpm320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_face320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_features2d320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_flann320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_fuzzy320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_highgui320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgcodecs320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgproc320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_line_descriptor320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ml320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_objdetect320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_optflow320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_photo320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_plot320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_reg320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_rgbd320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_saliency320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_shape320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stereo320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stitching320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_structured_light320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_superres320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_surface_matching320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_text320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_tracking320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_video320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videoio320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videostab320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xfeatures2d320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ximgproc320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xobjdetect320d.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xphoto320d.lib") // opencv_core
#else											  
//Releaseモードの場合								
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_aruco320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_bgsegm320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_calib3d320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ccalib320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_core320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_datasets320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dnn320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dpm320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_face320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_features2d320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_flann320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_fuzzy320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_highgui320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgcodecs320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgproc320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_line_descriptor320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ml320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_objdetect320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_optflow320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_photo320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_plot320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_reg320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_rgbd320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_saliency320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_shape320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stereo320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stitching320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_structured_light320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_superres320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_surface_matching320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_text320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_tracking320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_video320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videoio320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videostab320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xfeatures2d320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ximgproc320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xobjdetect320.lib")
#pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xphoto320.lib")
#endif


もしくは、もう一つの方法としてヘッダファイルの時と同じように、プロパティを開きリンカーの追加のライブラリディレクトリに

C:/opencv320/build/install/x86/vc14/lib

を追加します。
次にリンカーの入力の追加の依存ファイルにlibフォルダの中身を追加します。構成のDebugかReleaseかによって追加するファイルを分けてください。
opencv_xxxd.libはDebugに、opencv_xxx.libはReleaseといった感じに追加してください。

サンプルプログラムをビルドする。

ここまできたらOpenCVを使えるはずです。
適当なサンプルコードを貼っつけてビルドできたら成功です。
サンプルコードは↓