OpenCVOpenCV2.4.6

【OpenCV】スタティックリンクライブラリの使用方法

OpenCVをダウンロードすると、ビルド済みのスタティックリンクライブラリがstaticlibというフォルダ内に格納されているのですが、以前、試した時には、うまく利用する事ができずに、CMakeでビルドしていました。

 

OpenCVをスタティックリンクライブラリでビルドする方法

OpenCVをスタティックリンクライブラリでビルドする方法
スタティックリンクライブラリを使うと他のPCへ作成した実行ファイルを移植する時にexeファイルをコピーすればOpenCVをインストールする事なく実行できるので、メリットはあるので、使ってみたいのですが、これが、なかなか分かりづらい。 Ope...

 

再度、OpenCV2.4.6で試してみたところ、以下の方法でスタティックリンクライブラリを使用する事ができました。

 

まず、こちら↓

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

よりOpenCVをダウンロードします。

 

WindowsのVer.2.4.6の場合はOpenCV-2.4.6.0.exeのファイルをダウンロードします。

 

ダウンロードしたファイルをダブルクリックすると自己解凍されますが、以下、ルートディレクトリ(c:\ )に解凍した場合を想定して説明します。

 

目的のスタティックリンクライブラリは下記フォルダに格納されています。

 

opencv
├build
├x86
│ ├vc9
│ ├vc10
│ │ ├staticlib
│ ├vc11
├x64

 

x86やx64、vc9,vc10,vc11は使用する環境に合わせて使用するフォルダを選択します。

 

まず、C++のプロジェクトを作成し、プロジェクトのプロパティで、構成すべての構成にし、構成のプロパティ→C/C++→全般→追加のインクルードディレクトリにopencv2のあるフォルダ

 

c:\opencv\build\include

 

などを指定します。(ファイルの解凍先によりディレクトリが異なります。)

 

【OpenCV】スタティックリンクライブラリの使用方法

 

次にスタティックリンクライブラリのあるフォルダの設定を行います。

こちらもプロジェクトのプロパティで、構成すべての構成にし、構成のプロパティ→リンカー→全般→追加のライブラリディレクトリ

 

c:\opencv\build\x86\vc10\staticlib

 

などを指定します。(ファイルの解凍先や開発環境によりディレクトリが異なります。)

 

x86・・・32bitプログラムを作成する場合(OSが64bitでも32bitプログラムは作成可能です。)
x64・・・64bitプログラムを作成する場合
(構成マネージャでプラットフォームをx64にするのをお忘れなく。
分からなければ、64bitOSであっても、まずはx86を使用して下さい。)
vc9・・・Visual Studio 2008で開発する場合
vc10・・・Visual Studio 2010で開発する場合
vc11・・・Visual Studio 2012で開発する場合

【OpenCV】スタティックリンクライブラリの使用方法

 

次に特定の規定のライブラリの無視というのを設定するのですが、これはDebugとReleaseで設定が違うので、構成のプロパティ→リンカー→入力→特定の規定のライブラリの無視の設定

 

構成がDebugの場合
Libcmtd.lib;msvcprtd.lib

構成がReleaseの場合
Libcmt.lib;msvcprt.lib

 

と入力します。

 

【OpenCV】スタティックリンクライブラリの使用方法

 

これで、OpenCVを使う準備ができたので、コードを下記のように書きます。

ここでのポイントはcomclt32.libファイルを追加している部分ぐらい。

以下、Canny Edge Detectorのサンプルコードです。

#include "stdafx.h"

//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// opencv2のあるフォルダ(C:\opencv\build\includeなど)を追加のこと
#include "opencv2\opencv.hpp"

#pragma comment(lib,"comctl32.lib")

// バージョン名の取得
#define CV_VERSION_STR CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)

// libファイル名の最後の部分をReleaseとDebugで分ける
#ifdef _DEBUG
#define CV_EXT_STR "d.lib"
#else
#define CV_EXT_STR ".lib"
#endif

//プロジェクトのプロパティ⇒リンカー⇒全般 の追加のライブラリディレクトリに
// libファイルのあるフォルダ(C:\opencv\build\x86\vc10\libなど)を追加のこと
#pragma comment(lib, "opencv_core"	CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "opencv_imgproc"	CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "opencv_highgui"	CV_VERSION_STR CV_EXT_STR)

#pragma comment(lib, "zlib"	CV_EXT_STR)
#pragma comment(lib, "IlmImf"	CV_EXT_STR)
#pragma comment(lib, "libjasper"CV_EXT_STR)
#pragma comment(lib, "libjpeg"	CV_EXT_STR)
#pragma comment(lib, "libpng"	CV_EXT_STR)
#pragma comment(lib, "libtiff"	CV_EXT_STR)

int _tmain(int argc, _TCHAR* argv[])
{
    //画像データの読込
    cv::Mat src_img = cv::imread("lena.jpg", -1);
    if (src_img.empty()){
        return -1;
    }

    //表示ウィンドウの作成
    cv::namedWindow("src");
    cv::namedWindow("dst");

    //処理後画像データ格納用
    cv::Mat dst_img;

    //画像処理例(Canny Edge Detector)
    cv::Canny(src_img, dst_img, 100.0, 150.0);

	//画像の表示
    cv::imshow("src", src_img);
    cv::imshow("dst", dst_img);

	//キー入力待ち
    cv::waitKey (0);

	return 0;
}

(実行結果)

【OpenCV】スタティックリンクライブラリの使用方法

 

サンプルプロジェクトファイルはこちら↓

OpenCVStaticSample.zip

(OpenCV2.4.6 + Visual Studio 2010 C++ Expressのサンプルです)

 

スタティックリンクライブラリを使うと、Pathの設定が無いので、ちょっと楽!

 

OpenCVへ戻る

コメント

タイトルとURLをコピーしました