如何在Gradle的C ++项目构建中集成OpenCV

时间:2016-09-13 19:12:36

标签: c++ opencv gradle

我设置了hello world项目here,它基本上是来自gradle项目here的样本的复制/粘贴。

我的下一步是hello world但是对于OpenCV框架。它将在内存中读取图片并显示它。确切地说,main.cpp我们会更喜欢那个

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

正如您所看到的,我包含了OpenCV标头,但我正在努力通过gradle添加lib本身。我可能不得不使用prebuilt方式,但我失败了。

1 个答案:

答案 0 :(得分:0)

我认为您需要配置标头和预建的库链接:

我通常在android中做,但我不能保证它有效,因为我不知道你的gradle插件是什么。 但您可以使用线索,根据您的gradle版本,语法可以更改。

首先定义你的opencv目录:

opencv.dir="the site where opencv headers are"

定义opencv库后,定义headers.srcDir

repositories {
  libs(PrebuiltLibraries) {
    opencv_core {
    headers.srcDir "your opencv.dir"
      binaries.withType(StaticLibraryBinary) { binary ->
        // This closure will be executed once for every buildType/platform combination
        def variantDir = binary.targetPlatform.architecture.name == 'i386' ? 'Win32' : 'x64'
        staticLibraryFile = "path/to/library/${variantDir}/opencv_core.so"
      }
    }
    opencv_another_lib {
    headers.srcDir "your opencv.dir"
      binaries.withType(StaticLibraryBinary) { binary ->
        // This closure will be executed once for every buildType/platform combination
        def variantDir = binary.targetPlatform.architecture.name == 'i386' ? 'Win32' : 'x64'
        staticLibraryFile = "path/to/library/${variantDir}/opencv_another_lib.so"
      }
    }
  }

可能,例如opencv_core将有更多的3rparty依赖,尝试以相同的方式添加。

我希望这会有所帮助。

干杯。

垂发。