传递cv:Mat从android到jni

时间:2015-02-26 07:43:16

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

我正在尝试将一个Mat对象从android端发送到jni端,我不想发送mat对象地址。 但是我的jni代码在Mat中没有行返回0,我没有得到。

Android-Java代码是:

buttton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
         Utils.bitmapToMat(bitmap, mat);
         Log.d(TAG,Integer.toString(m.rows())+" "+Integer.toString(m.cols()));

        textView.setText(Integer.toString(openCVJNI(m)));
    }
});

JNI代码是:

extern "C" {
    JNIEXPORT jint JNICALL
    Java_com_example_color_MainActivity_openCVJNI(JNIEnv *env, jobject thiz, Mat inputImage)
    {   
       return inputImage.rows;
    }
}

1 个答案:

答案 0 :(得分:5)

请参阅https://github.com/Itseez/opencv/tree/master/samples/android/tutorial-2-mixedprocessing示例。

org.opencv.core.MatgetNativeObjAddr方法,它返回long,可以将其解释为指向cv::Mat的指针。

Java代码:

openCVJNI(m.getNativeObjAddr());

JNI代码:

Java_com_example_color_MainActivity_openCVJNI(JNIEnv *env, jobject thiz, long addrInputImage)
{
    cv::Mat* pInputImage = (cv::Mat*)addrInputImage;
    return pInputImage->rows;
}