将cv:Mat从android传给jni

 2023-01-20    291  

问题描述

我试图将垫子对象从Android侧发送到JNI侧,我不想发送垫子对象地址.
但是我的jni代码返回垫子中没有行的0,我没有得到.

android-java代码是:

将cv:Mat从android传给jni

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;
    }
}

推荐答案

请参阅 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;
}

以上所述是小编给大家介绍的将cv:Mat从android传给jni,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26045.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。