Android 通过jni返回Mat数据类型
2017-07-30 22:09
507 查看
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,用于保存图像处理结果图像,获取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数据类型方法
- Android通过ksoap向webserice传递复杂类型数据
- Android的NDK开发(3)————JNI数据类型的详解
- Android的NDK开发(3)————JNI数据类型的详解
- Android JNI 数据类型转换
- Android Jni 类型的转化,传递数据
- Android JNI入门第五篇——基本数据类型使用
- Android通过post请求发送一个xml,解析返回xml数据
- Android------JNI 数据类型转换
- android jni学习笔记之数据类型表
- Android JNI ,jni基本数据类型转换
- Android 下通过jni读取i2c数据
- Android的NDK开发(3)————JNI数据类型的详解
- Android 下通过jni读取i2c数据
- Android JNI入门第五篇——基本数据类型使用
- [Android] Jni中C++和Java的数据类型的对应关系
- Android的NDK开发(3)————JNI数据类型的详解
- android jni 基本数据类型 类 复杂数据类型 ArrayList
- Android JNI和NDK学习(06)--JNI的数据类型
- Android的NDK开发(3)————JNI数据类型的详解