当前位置: 首页 > 编程笔记 >

Android 通过jni返回Mat数据类型方法

曹泉
2023-03-14
本文向大家介绍Android 通过jni返回Mat数据类型方法,包括了Android 通过jni返回Mat数据类型方法的使用技巧和注意事项,需要的朋友参考一下

Android 开发过程中为了实现代码的高效性,通常要调用本地c++代码,JNI是java语言提供的和c/c++相互沟通的机制,在使用opencv做图像处理时,通常要调用c/c++代码进行相关操作,将处理后的结果返回java进行显示或者其他操作。

可以在java部分创建一个Mat,用于保存图像处理结果图像,获取Mat 的本地地址传入jni函数中:

// java
Mat res = new Mat();
jni_fun(res.getNativeObjAddr());

c++部分新建Mat指针指向java传入的内存区域,将处理后的结果图像的Mat数据复制到这块内存区域,这样java中的创建的Mat就变为结果图像:

//jni c++
void jni_fun(jlong Mataddr){
   Mat* res = (Mat*)MatAddr;
   Mat image = ImgProcess();
   res->create(image.rows,image.cols,image.type());
   memcpy(res->data,image.data,image.rows*image.step);

如果需要将java中的图像传入c++进行处理,然后返回结果,道理一样:

//java 
Mat res = new Mat();
jni_fun(srcMat.getNativeObjAddr(),res.getNativeObjAddr());
 
//c++
void jni_fun(jlong srcMat,jlong resMat){
    Mat* src = (Mat*)srcMat;
    Mat* res = (Mat*)srcMat;
    Mat image = ImgProcess(*src);
    ...
    ...
}

以上这篇Android 通过jni返回Mat数据类型方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 我想用JNI编写一个函数,如下所示: (JNIEnv*jenv,jclass,jstring文件输入,jobject mat) Java接口将是: 现在我想将Mat传递给JNI并更改其值。 有人能给我一个教程或指南吗?特别是如何使用j对象。

  • 问题内容: 我目前在一个项目中同时使用C 和Java,并且希望能够将包含在C 中的对象发送到我的Java接口,以便通过GUI对其进行修改,然后将所做的修改发送回C ++中。 到目前为止,我一直没有通过JNI接口向Java返回int或boolean值。这次我必须通过接口发送对象。我已经在C ++和Java中提供了类似的类定义。 我想知道如何创建对象,以便可以在Java中使用它。 在C ++中,我有:

  • 问题内容: 这就是我想要做的。使用反射,我想获取所有方法及其返回类型(非泛型)。我一直在这样做。但是,当我遇到返回类型未知的方法时,我遇到了限制。 我如何知道方法的返回类型是否通用?我没有奢求在运行时拥有对象。我正在尝试使用Google 或使用抽象类来获取类型信息。我想关联到对象的方法。 有人认为Java不保留通用信息。在这种情况下,为什么第一次强制转换有效而第二次强制转换无效。 任何帮助表示赞赏

  • 本文向大家介绍jQuery通过Ajax返回JSON数据,包括了jQuery通过Ajax返回JSON数据的使用技巧和注意事项,需要的朋友参考一下 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据。本文将通过实例演示了jQuery通过Ajax向PHP服务端发送请求并返回JSON数据。 JSON(JavaScript Object Notation

  • 问题内容: 我正在转换C api> Java,并且具有以下函数原型。 我想按预期返回状态,以整数形式返回“类型”,以字符串形式返回“值”(不被释放) 从文档中,我发现您创建了两个可以保留返回值的结构。 有人可以帮我做第一个吗? 问题答案: 假设函数声明存在于一个名为header.h的文件中,则可以执行以下操作: 这将隐藏“实数” ,而是替换为在(不可修改的)结构中返回输出参数和调用结果的版本。 (

  • 问题内容: 考虑以下示例(OOP书籍中的典型示例): 我有一Animal堂课,每个人Animal可以有很多朋友。 和子类喜欢Dog,Duck,Mouse等里面加如特定行为bark(),quack()等等。 这是Animal课程: 这是一些带有大量类型转换的代码片段: 有什么办法可以将泛型用于返回类型来摆脱类型转换,所以我可以说 这是一些带有返回类型的初始代码,这些代码作为从未使用过的参数传递给该方