Android - доступ к собственным функциям в предварительно скомпилированной библиотеке
Я хотел бы использовать встроенную функцию OpenCV getThreshVal_Otsu_8u
в моем приложении для Android. Я заметил, что внешние функции-оболочки Java OpenCV вызывают функции, определенные как 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 )
Как я могу сделать подобное native
Java-функция для вызова getThreshVal_Otsu_8u
? Есть ли способ избежать перестройки библиотек OpenCV и просто "туннелировать" в существующую .lib
файлы?
1 ответ
Если это еще не так, вам сначала нужно настроить свой проект Android, чтобы использовать собственный интерфейс Java ( эта ссылка может помочь).
Как только он настроен, принцип довольно прост:
- Вам необходимо создать собственный прототип Java в вашем коде Java (например,
public native void yourFunction();
) - Соответствующая функция должна быть определена в вашем файле C/C++ (например,
JNIEXPORT void JNICALL Java_your_package_JavaClassName_yourFunction(JNIEnv * env, jobject obj);
) - Вы должны иметь возможность включить библиотеку OpenCV в ваш код C/C++ (например,
#include <opencv2/core/core.hpp>
)
Метод, который вы хотите использовать (т.е. getThreshVal_0tsu_8u
) занимает Mat&
в качестве параметра и возвращает double, что означает, что вам нужно будет соответственно адаптировать свой jni-код.