2016-09-01 9 views
0

OpenCVを使用してC++で非常に簡単なクラスを作成しました。opencvコードをライブラリ形式でエクスポートする

#include "librarytestcreate.h" 
#include<highgui.hpp> 
using namespace cv; 
LibraryTestCreate::LibraryTestCreate() 
{ 
} 
int LibraryTestCreate::countRows(char *src) 
{ 
    Mat img = imread(src); 
    return img.rows; 
} 

ヘッダlibrarytestcreate.hは: -

#ifndef LIBRARYTESTCREATE_H 
#define LIBRARYTESTCREATE_H 

#include "librarytestcreate_global.h" 

class LIBRARYTESTCREATESHARED_EXPORT LibraryTestCreate 
{ 

public: 
    LibraryTestCreate(); 
    int countRows(char *src); 
}; 

#endif // LIBRARYTESTCREATE_H 

Iは、(.dllファイル内のこのクラスをエクスポートするthisリンク

に従ってLIBRARYTESTCREATESHARED_EXPORTを定義しているlibrarytestcreate_global.hヘッダOpenCVをインストールしていないユーザがOpenCVをインストールしなくてもこの機能を使用できるように、Windowsの場合は.soファイル、Ubuntuの場合は.soファイルを使用します。 私はthisを試しましたが、私はOpenCVをインストールする必要があるユーザーを設定する必要があると感じています。私はこの問題にどのようにアプローチすべきですか?

答えて

0

ダイナミックライブラリプロジェクトでダイナミックライブラリとしてOpenCVを使用する場合、ダイナミックライブラリを使用する場合は、ダイナミックライブラリのユーザにもOpenCVダイナミックライブラリが必要です。あなたのダイナミックライブラリはOpenCVダイナミックライブラリに依存しているので、そうです。

ダイナミックライブラリのユーザがOpenCVダイナミックライブラリに必要ないようにするには、ダイナミックライブラリプロジェクトでスタティックライブラリとしてOpenCVを使用するか、OpenCVのすべてのソースをプロジェクトに直接追加する必要があります。私は実際には分かりませんが、OpenCVを静的ライブラリとして使用したり、コードを再利用することは可能ですか(私はこのライブラリを使用しません)、おそらくいくつかのライセンス制限があります。

私はあなたのための最良の方法は、インストールされた1つのパッケージでOpenCVライブラリを使って動的ライブラリを提供することだと思います。

0

@Kirill Chernikovが示唆しているように、静的ライブラリが必要です。実際には、 OpenCV用に構築するのはかなり簡単です。ビルドを設定する場合、 はBUILD_SHARED_LIBSを指定:もちろん

$ cmake $OTHER_CMAKE_PARAMETERS -DBUILD_SHARED_LIBS=OFF $SOURCE_DIR 

をあなたも"Installation in Linux""Installation in Windows"で説明されてい$OTHER_CMAKE_PARAMETERS$SOURCE_DIRを、設定する必要があります。

次に、静的ライブラリをダイナミックライブラリにリンクします。

脇の下として、で、あなたのライブラリ のAPIにOpenCVデータ型が公開されていないことを確認してください。さもなければ事は乱雑になるでしょう。

関連する問題