以库的形式导出opencv代码

时间:2016-09-01 11:06:18

标签: c++ qt opencv dll qt-creator

我使用OpenCV在C ++中编写了一个非常简单的类。

#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

标题librarytestcreate_global.h根据this链接

定义了LIBRARYTESTCREATESHARED_EXPORT

我希望在.dll文件(在Windows中)或.so文件(在Ubuntu中)中导出此类,以便在系统中未安装OpenCV的任何用户都可以使用此功能而无需安装OpenCV。 我试过this但我觉得我必须配置用户需要安装OpenCV才能使用它。我该如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

如果在动态库项目中使用OpenCV作为动态库,则在使用动态库时,动态库的用户也必须具有OpenCV动态库。之所以这样,是因为您的动态库依赖于OpenCV动态库。

如果您希望OpenCV动态库中不需要动态库的用户,则必须在动态库项目中将OpenCV用作静态库,或者在项目中直接添加所有OpenCV源(您需要的)。我真的不知道,是否可以将OpenCV用作静态库或重用其代码(我从不使用此库),可能存在一些许可限制。

我认为最好的方法是在一个已安装的软件包中为您的动态库提供OpenCV库。

答案 1 :(得分:0)

正如@Kirill Chernikov建议的那样,你需要静态库。其实, 为OpenCV构建它们非常容易。配置构建时, 指定BUILD_SHARED_LIBS

$ cmake $OTHER_CMAKE_PARAMETERS -DBUILD_SHARED_LIBS=OFF $SOURCE_DIR

当然,您还需要设置$OTHER_CMAKE_PARAMETERS$SOURCE_DIR"Installation in Linux""Installation in Windows"中对此进行了解释 How do I draw a vertical line on a horizontal bar chart with ChartJS?

然后将静态库链接到动态库中。

作为旁注,请确保在API中公开OpenCV数据类型 你的图书馆。否则事情会变得混乱。