使用 JNI 传递和返回 OpenCv Mat 对象

Posted

技术标签:

【中文标题】使用 JNI 传递和返回 OpenCv Mat 对象【英文标题】:Pass and return OpenCv Mat object with JNI 【发布时间】:2014-03-31 02:43:06 【问题描述】:

我想在 JNI 中写一个这样的函数:

JNIEXPORT jobject JNICALL Java_com_datumdroid_android_ocr_simple_HoughLine_nativeDetectLine

(JNIEnv * jenv, jclass, jstring fileInput, jobject mat)

Java 接口是:

nativeDetectLine( String fileInput, Mat mat);

现在我想将 Mat 传递给 JNI 并更改它的值。

谁能给我一个教程或指南? 具体如何处理作业。

【问题讨论】:

【参考方案1】:

http://answers.opencv.org/question/12271/can-the-java-interface-pass-a-mat-to-opencvs-c/

JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_FindFeatures(JNIEnv*, jobject, jlong  addrGray, jlong addrRgba)

    Mat& mGr  = *(Mat*)addrGray;
    Mat& mRgb = *(Mat*)addrRgba;
    ... do stuff with the Mat objects ...

【讨论】:

首先将 jlong​​ 转换为 Mat* ,然后取消引用它。

以上是关于使用 JNI 传递和返回 OpenCv Mat 对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 jni 和 OpenCV 创建的带有 lib 的未定义符号

在YUV_420_888中将图像从Android发送到OpenCV Mat中的JNI的最有效方式

准备位图 byte[] 数据以传递给 jni

将 YUV_420_888 中的图像从 Android 发送到 OpenCV Mat 中的 JNI 的最有效方法

如何将 opencv Mat 类型传递给 Python 并返回一个数组?

请教,jni调用,类型转换.用opencv进行静态人脸检测