Android -访问原生函数在预编译库



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

Java功能:

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

Java "native"函数:

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 )

我如何使一个类似的native Java函数调用到getThreshVal_Otsu_8u ?有没有办法避免重建OpenCV库,只是"隧道"到现有的.lib文件?

如果不是这样的话,你首先需要设置你的Android项目,以便使用Java Native Interface(这个链接可能会有帮助)。

一旦设置好了,原理就很简单了:

    你需要在你的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)接受Mat&作为参数并返回double类型,这意味着您需要相应地调整您的jni代码。

最新更新