合計 昨日 今日

OpenCVのターゲート環境について

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: しぶ
[URL]
Date: 2017年3月08日(水) 09:16
No: 1
(OFFLINE)

 OpenCVのターゲート環境について

OpenCVを利用して開発する場合、開発用のPCにOpenCVインストールが必要ですが、
開発したアプリケーションを実行するターゲットPCにもOpenCVのインストールが必要でしょうか。

Name: みえ
[URL]
初心者(8,817 ポイント)
Date: 2017年3月08日(水) 12:54
No: 2
(OFFLINE)

 Re: OpenCVのターゲート環境について

OpenCV は共有ライブラリであり、静的リンクにも動的リンクにも対応しています。
静的リンクする場合、実行可能ファイルに OpenCV が含まれるため、サイズは大きくなりますが実行環境に OpenCV は不要になります。
動的リンクの場合は逆で、実行可能ファイルは小さくできますが、実行環境に OpenCV のランタイムが必要になります。

リンクの方法は開発プラットフォームによって異なります。

もし Windows で Visual Studio をお使いの場合は以下のページが参考になると思います。

How to build applications with OpenCV inside the Microsoft Visual Studio — OpenCV 2.4.13.2 documentation
http://docs.opencv.org/2.4/doc/tutorial ... pencv.html

Linux で Make を使っている場合は Makefile、CMake を使っている場合は CMakeLists.txt などを変更することになると思います。

OpenCV のチュートリアルなんかだと、動的リンクの方法ばかりで、静的リンクの例があまりないですね。開発のチュートリアルなので当たり前かもしれませんが。
もし静的リンクをするための具体的な設定が分からなければ、しぶさんが想定している開発環境、実行環境の詳細を返信していただけますか。

Name: しぶ
[URL]
Date: 2017年3月10日(金) 14:48
No: 3
(OFFLINE)

 Re: OpenCVのターゲート環境について

みえ様
大変お世話になっております。
> もし静的リンクをするための具体的な設定が分からなければ、しぶさんが想定している開発環境、実行環境の詳細を返信していただけますか。

開発環境について下記の通りです。
OS: Windows 10
MS Visual studio 15
プログラミング言語 VC++
CPU: xeon 64bit
PCが来週到着する予定です。

主に静的にLIBを利用したいのです。
もしDLLの利用は単に*.dllをターゲットPCの指定するディレクトリーにcopyすればOKなら、
静動両方とも利用する可能性があります。
静的なLIBの利用方法と動的なDLLの利用方法(環境設定方法)の切り替え方法を教えていただければ幸いでございます。

すみませんが、どうぞ宜しくお願い申し上げます。

Name: みえ
[URL]
初心者(8,817 ポイント)
Date: 2017年3月17日(金) 13:57
No: 4
(OFFLINE)

 Re: OpenCVのターゲート環境について

すみません、返信が遅くなりました。Windows 10 64bit + Visual Studio 2015 の環境で、OpenCV の動的リンクと静的リンクを両方試してみました。

以下に示す手順を試したときに作ったソリューションを GitHub にアップロードしましたので、こちらも参考になれば幸いです。私の環境のフォルダーパスがハードコードされているので、お手元の開発環境に合わせて変更する必要があります。
動的リンク: https://github.com/msmania/opencv-sandb ... nk-dynamic
静的リンク: https://github.com/msmania/opencv-sandb ... ink-static

一つ一つの手順を細かく説明するとキリがないので、ある程度簡略化しています。もし手順の中で不明な点があればまたご質問ください。

## 動的リンク

動的リンクは簡単です。

1) https://sourceforge.net/projects/opencv ... pencv-win/ から zip ファイル (opencv-3.2.0-vc14.exe を使いました) をダウンロード
2) zip は単なる自己解凍書庫なので、適当な場所 (ここでは D:\opencv\opencv-3.2.0-vc14) に解凍
3) 解凍したファイルにヘッダーと lib ファイルが入っているので、Visual Studio のプロジェクト設定で解凍先を参照できるように設定

具体的には以下 3 箇所です。
[VC++ ディレクトリ] -> [インクルード ディレクトリ]: D:\opencv\opencv-3.2.0-vc14\build\include を追加
[VC++ ディレクトリ] -> [ライブラリ ディレクトリ]: D:\opencv\opencv-3.2.0-vc14\build\x64\vc14\lib を追加
[リンカー] -> [入力] -> [追加の依存ファイル]: Release では opencv_world320.lib、Debug では opencv_world320d.lib を追加

これで OpenCV が使えるようになります。ビルドしてできた exe は dll への依存関係があるので、opencv_world320.dll (Debug 版では opencv_world320d.dll) と一緒に配布する必要があります。

## 静的リンク

静的リンクを使う場合、ダウンロードできる zip に静的リンク用の lib ファイルが入っていないので、ソースからビルドする必要があります。zip にもソース ファイルが入っていますが、今回は GitHub の最新のコードを使う手順です。手順は面倒ですが、最新版を使えますし、とにかく自由にライブラリをカスタマイズできるので、動的リンクを使う場合でもソースからビルドするメリットはけっこうあると思います。

1) https://cmake.org/download/ から CMake のバイナリをダウンロード (2017/3/16 時点での最新版は cmake-3.8.0-rc2-win64-x64.zip) して適当な場所 (ここでは D:\cmake) に解凍
2) https://github.com/opencv/opencv をクローン (ここでは D:\git にクローン)
3) クローンしたローカル リポジトリ内に build というフォルダーを作成 (D:\git\opencv\build)
4) スタートメニューから "VS2015 x64 Native Tools Commant Prompt" を起動してプロンプトを開く
5) build ディレクトリをカレント ディレクトリにして、以下のコマンドのようにcmake を実行してソリューションを生成
ここで OPENCV_MODULE_TYPE=STATIC を付加することで静的リンク ライブラリのプロジェクトができます。省略すると動的リンクを使うライブラリができます。
コマンド末尾のドット 2 つも忘れずに含めて実行してください。

D:\git\opencv\build> D:\cmake\cmake-3.8.0-rc2-win64-x64\bin\cmake.exe -D OPENCV_MODULE_TYPE=STATIC -G "Visual Studio 14 2015 Win64" ..

6) CMake の結果、opencv.sln というソリューションができます。これを msbuild コマンドでビルドします。以下は x64|Release の構成です。x86 や Debug が必要なときは再度 msbuild を実行してください。

D:\git\opencv\build> msbuild opencv.sln /p:Configuration=Release /p:Platform=x64

7) msbuild が終われば準備完了です。Visual Studio のプロジェクト設定で、ビルド結果を参照できるように設定します。
自分でビルドする場合、モジュールが分かれてしまうので、開発しているプログラムによってはもっとファイルを追加する必要が出てきます。CMake を実行するときに、動的リンクの例のように opencv_world320 を生成できるオプションがあったかもしれません。必要なら調べて試してみますので、その旨ご返信ください。

[VC++ ディレクトリ] -> [インクルード ディレクトリ] (Debug/Release 構成で共通)
D:\git\opencv\build
D:\git\opencv\modules\core\include
D:\git\opencv\modules\highgui\include
D:\git\opencv\modules\imgproc\include
D:\git\opencv\modules\imgcodecs\include
D:\git\opencv\modules\videoio\include

[VC++ ディレクトリ] -> [ライブラリ ディレクトリ] (Release 構成)
D:\git\opencv\build\3rdparty\ippicv\ippicv_win\lib\intel64;D:\git\opencv\build\3rdparty\lib\Release;D:\git\opencv\build\lib\Release

[VC++ ディレクトリ] -> [ライブラリ ディレクトリ] (Debug 構成)
D:\git\opencv\build\3rdparty\ippicv\ippicv_win\lib\intel64;D:\git\opencv\build\3rdparty\lib\Debug;D:\git\opencv\build\lib\Debug

[リンカー] -> [入力] -> [追加の依存ファイル] (Release 構成)
ippicvmt.lib
IlmImf.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
libwebp.lib
zlib.lib
opencv_core320.lib
opencv_imgcodecs320.lib
opencv_imgproc320.lib
opencv_highgui320.lib

[リンカー] -> [入力] -> [追加の依存ファイル] (Debug 構成)
ippicvmt.lib
IlmImfd.lib
libjasperd.lib
libjpegd.lib
libpngd.lib
libtiffd.lib
libwebpd.lib
zlibd.lib
opencv_core320d.lib
opencv_imgcodecs320d.lib
opencv_imgproc320d.lib
opencv_highgui320d.lib


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[9人]