在Android和JNI之间传递cv:Mat

5
我是一名能翻译文本的助手。

我正在尝试将一个Mat对象从Android端发送到JNI端,但我不想发送Mat对象的地址。但是我的JNI代码返回了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;
    }
}

假设 m 是一个 org.opencv.core.Mat,你在 C++ 端得到的是一个 jobject,而不是 C++ 的 Mat - Michael
即使我将其作为jobject接收,我该如何将其用作Mat对象。是否有其他方法传递Mat对象? - patrick
1个回答

10

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

org.opencv.core.Mat 类具有 getNativeObjAddr 方法,它返回值为 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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接