0

我想getThreshVal_Otsu_8u在我的 Android 应用程序中使用本机 OpenCV 功能。我注意到外部 OpenCV Java 包装函数调用定义为的函数native,但它们的名称与实际的本机函数不同。例如:

Java函数:

double threshold(Mat src, Mat dst, double thresh, double maxval, int type)

Java“本机”功能:

private static native double threshold_0(long src_nativeObj, long dst_nativeObj, double thresh, double maxval, int type)

C++ 函数:

double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double maxval, int type )

如何制作一个类似的nativeJava 函数来调用getThreshVal_Otsu_8u?有什么方法可以避免重建 OpenCV 库而只是“隧道”到现有.lib文件中?

4

1 回答 1

1

如果还没有,您首先需要设置您的 Android 项目以使用 Java 原生接口(此链接可能会有所帮助)。

设置好之后,原理就很简单了:

  • 你需要在你的 Java 代码中创建一个 Java 原生原型(例如public native void yourFunction();
  • 必须在您的 C/C++ 文件中定义相应的函数(例如JNIEXPORT void JNICALL Java_your_package_JavaClassName_yourFunction(JNIEnv * env, jobject obj);
  • 您应该能够在您的 C/C++ 代码中包含 OpenCV 库(例如#include <opencv2/core/core.hpp>

您要使用的方法(即getThreshVal_0tsu_8u)将 aMat&作为参数并返回一个 double,这意味着您需要相应地调整您的 jni 代码。

于 2013-05-06T07:17:24.797 回答