将InputArrayOfArrays从java类传递给JNI

时间:2017-09-08 07:32:48

标签: java android c++ opencv android-ndk

我在JNI cpp文件中生成了以下方法,

JNIEXPORT void JNICALL Java_com_idesign_opencvmaketest_MainActivity_train
        (JNIEnv *env, jobject thisObj, jobjectArray images, jobjectArray labels) {
    Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create();

    /** make a call to 
    *   CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0;
    **/
    model->train(images, labels);
}

现在我要

  

参数类型不匹配:类型&#39; const _InputArray&#39;和&#39; jobjectArray&#39;   不兼容

imageslabels

中的model->train(images, labels);

那么MainActivity_train方法中图像和标签的参数类型是什么?

还有如何使用正确的参数类型从Java类调用此JNI方法?

我是OpenCv和JNI的新手。

1 个答案:

答案 0 :(得分:1)

jobjectArray不是Matorg.opencv.core.Mat类具有返回类型为getNativeObjAddr()的{​​{1}}方法,可以将其解释为指向long的指针。有关OpenCV Java API here的更多信息,示例代码here

方法

Mat

CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels)作为来源,将std::vector<cv::Mat> images作为标签。因此,据我所知,您需要将多个图像传递给std::vector<int> lables方法。请参阅示例here

JNI