【问题标题】:Passing InputArrayOfArrays from java class to JNI将 InputArrayOfArrays 从 java 类传递给 JNI
【发布时间】:2018-02-17 01:24:41
【问题描述】:

我在 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);
}

现在我明白了

参数类型不匹配:类型“const _InputArray”和“jobjectArray” 不兼容

imageslabels model-&gt;train(images, labels);

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

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

我是 OpenCv 和 JNI 的新手。

【问题讨论】:

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


    【解决方案1】:

    jobjectArray 不是 Matorg.opencv.core.Mat 类有一个getNativeObjAddr() 方法,返回类型为long,可以解释为指向Mat 的指针。更多关于 OpenCV Java API here,示例代码 here

    方法

    CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels)

    std::vector&lt;cv::Mat&gt; images 作为源,将std::vector&lt;int&gt; lables 作为标签。据我所知,您需要将多个图像传递给您的 JNI 方法。参见示例here

    JNIEXPORT void JNICALL Java_com_idesign_opencvmaketest_MainActivity_train
            (JNIEnv *env, jobject thisObj, jlong images, jlong labels) {
    
    Mat& matImage  = *(Mat*)images; //to create one Mat image, you need an array of Mat
    Mat& matLabels = *(Mat*)labels; // create a Mat from labels
    
    /*
    To pass correct parameters, you would do:
    
    std::vector<cv::Mat> vecImages;
    vecImages.push_back(matImage);
    
    std::vector<int> vecLabels;
    //put your labels to vecLabels here
    
    model->train(vecImages,vecLabels);
    */
    
    Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create();
    
    /** make a call to 
    *   CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0;
    **/
    model->train(matImages, matLabels); // function requires ArrayofMats and ArrayofInts
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多