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数据类型方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Android将camera获取到的YuvData在jni中转化为Mat方法
Android中可以通过camera获取图像,并实时处理,不同的手机camera支持的的图像格式不同,可以采用getCameraPreviewFormat来得到preview支持的图像编码格式,Android默认使用NV21(yuv420sp)的图像格式,因为大部分手机都支持. 为了达到实时处理的目的,很多时候我们将得到的yuv数据直接传入jni中的c++使用,减少上层转化图像格式的过程yuv420本身属于单通道图像,若图像处理中只需要获取灰度图像,可以在c++中直接通过Mat构造函数构造生成灰
-
利用OPENCV为android开发畸变校正的JNI库方法
需要为项目提供一套畸变校正的算法,由于需要大量的矩阵运算,考虑到效率和适时性,使用JNI开发,希望把有关数组短阵的处理的变换全部放入C语言中处理. 主要用于android移动端,大致的数据来源一是从camera直接读取YUV数据,一种是从第三方接读取RGB数据,另一种是直接对BITMAP进行处理. 1.考虑到硬件设备接口,第三方软件接口,图像接口,OPENCV接口,希望能够开发出通用的算法库,一劳永逸的解决各种复杂的使用场景,因此数据要支持YUV,支持ARGB,支持MAT 2android对BI
-
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指针指
-
Android使用jni调用c++/c方法详解
1.下载ndk 2.编写jni的加载类 参考例子: public class JniTest { public native String append(String str1, String str2); static { System.loadLibrary("JniTest"); } } 以上append方法就是要调用c++/c中的方法. JniTest是在Android.mk里约束好的,关于Android.mk的编写具体在后面详解. 3.使用javah -jni生成.h文件 编
-
Android在JNI中使用ByteBuffer的方法
本文实例讲述了Android在JNI中使用ByteBuffer的方法.分享给大家供大家参考.具体如下: 一.ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer. ByteBuffer有以下几
-
android监听返回按钮事件的方法
本文实例讲述了android监听返回按钮事件的方法.分享给大家供大家参考.具体如下: 用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown事件,实现的效果如下: java代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l
-
Android编程使用Fragment界面向下跳转并一级级返回的实现方法
本文实例讲述了Android编程使用Fragment界面向下跳转并一级级返回的实现方法.分享给大家供大家参考,具体如下: 1.首先贴上项目结构图: 2.先添加一个接口文件BackHandledInterface.java,定义一个setSelectedFragment方法用于设置当前加载的Fragment在栈顶,主界面MainActivity须实现此接口,代码如下: package com.example.testdemo; public interface BackHandledInterfa
-
Android右滑返回上一个界面的实现方法
Android右滑返回上一个界面的实现方法 public class BaseActivity extends Activity implements OnTouchListener { public ProgressDialog progressDialog; public String states; public RequestQueue mQueue; /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF
-
android getActivity.findViewById获取ListView 返回NULL的方法
在控件ID正确的情况下,检查是否在实例化布局文件之后,获取LISTVIEW, 先inflate找layout下布局文件,并实例化后才能获得Listview的ID demo: public class FragmentPage extends Fragment { View view = null; @Override @SuppressLint("HandlerLeak") public View onCreateView(LayoutInflater inflater, ViewGr
-
从源码编译Android系统的Java类库和JNI动态库的方法
利用源码编译Android系统Java类库 1.编写Java项目和Android.mk文件 ├── Android.mk └── src └── com └── lhw └── framework └── led └── Led.java Led.java文件 package com.lhw.framework.led; /** * LED操作库 * @author Micky Liu */ public class Led { public boolean turnOn() { return
-
实例详解Android中JNI的使用方法
目录 前言 1.导入C语言的类 2.接着导入Android.mk文件 3.我们配置一下build.gradle文件 4.好了,此时可以编译一下项目了 5.此时我们可以找一下我们生成的so包了 6.将生成的so文件拷入src/main/jniLibs中 7.调用C语言方法的Activity如下 总结 前言 做Android开发的程序员应该都知道,Android的开发语言我们都是在使用JAVA(Kotlin和Flutter我们暂时不考虑).但是,有时候我们也需要使用到C语言进行一些功能的开发.这个时
-
android 调用JNI SO动态库的方法
总结一下: android 调用JNI 分为静态调用与动态调用(不论动态还是静态前提都是NDK环境已经配置好的前提下) 一.静态主要就是将c(.c)或者c++(cpp)的源文件直接加到项目中进行调用, 然后在CMakeLists.txt中进行配置. 二.动态调用 1.动态调用使用已经编译好的动态库.so文件 2.android调用ndk类 生成后的so文件 public class SerialPort { p */ public static native int GetSOVer(Strin
随机推荐
- 在Lua中使用模块的基础教程
- python中list列表的高级函数
- javascript函数式编程程序员的工具集
- crontab无法执行php的解决方法
- mysql如果数据不存在,则插入新数据,否则更新的实现方法
- Zend Framework教程之Zend_Controller_Plugin插件用法详解
- 使用透明叠加法美化文件上传界面的代码
- php 静态化实现代码
- Python中获取对象信息的方法
- js 按照指定间隔 向字符串中插入随机字符串的实现代码
- js,jq,css多方面实现简易下拉菜单功能
- Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结
- AJAX JavaScript反射机制的介绍
- C# networkcomms 3.0实现模拟登陆总结
- 通过C#实现自动售货机接口
- java ThreadLocal使用案例详解
- SpringBoot JdbcTemplate批量操作的示例代码
- Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
- MockJs结合json-server模拟后台数据
- python实现删除列表中某个元素的3种方法