Android(安卓)OpenCV:读取Matlab生成的.mat文件并转换成OpenCV的Mat对象
16lz
2021-01-26
-
下载读取mat文件需要用到的jar包:
第一个jar包下载地址:http://pan.baidu.com/s/1nuMMqvB
第二个jar包下载地址:https://github.com/ujmp/universal-java-matrix-package/releases/download/0.3.0/ujmp-complete-0.3.0.jarPS:该部分文章参考自lz3018的Java读取mat文件。
-
进行.mat文件的读取,并获得对应的double类型的二维数组:
在Matlab中导出一个[1 2; 3 4]的名字为t1.mat文件(2*2 double),然后将文件放到模拟器上。
使用jmatio.jar中的类进行文件的读取:(PS:完整代码请看5)
// 从指定的url中读取mat文件,如"/storage/emulated/0/Download/t1.mat"MatFileReader matFileReader = new MatFileReader(url);// MatFileReader中,数据存在matFileReader.data中,所以通过getContent()获取数据Map data = matFileReader.getContent();// filename为在Matlab中导出的数组的名字,此为t1MLArray mlArray = data.get(filename);// 获取数组行数和列数int rows = mlArray.getM();int cols = mlArray.getN();// 进行类型的强制转换MLDouble mlDouble = (MLDouble)mlArray;// 转换为double类型的二维数组,主要用于后面的转换为OpenCV的mat对象double[][] doubles = mlDouble.getArray();
- 通过double类型的二维数组,获得OpenCV的Mat对象:
int index = 0;// Mat对象的初始化无法使用二维数组,所以需要将二维数组转换成一维数组 double[] doubleMat = new double[rows*cols]; for(double[] a : doubles){ for (double b : a) { doubleMat[index++] = b; } }// mat对象的初始化mat = new Mat(rows, cols, new MatOfDouble().type());mat.put(0, 0, doubleMat);
- 运行结果:
PS:在使用的时候,会发出一个错误,不影响运行结果。暂时不知道怎么解决,求告知。
- 完整代码:
/** * 根据地址加载double数据类型的mat文件 * @param url * @return mat */ public static Mat loadDoubleMatFile(String url, String filename){ Mat mat = null; try { MatFileReader matFileReader = new MatFileReader(url); Map data = matFileReader.getContent(); MLArray mlArray = data.get(filename); int rows = mlArray.getM(); int cols = mlArray.getN(); MLDouble mlDouble = (MLDouble)mlArray; double[][] doubles = mlDouble.getArray(); int index = 0; double[] doubleMat = new double[rows*cols]; for(double[] a : doubles){ for (double b : a) { doubleMat[index++] = b; } } mat = new Mat(rows, cols, new MatOfDouble().type()); mat.put(0, 0, doubleMat); } catch (Exception e) { e.printStackTrace(); } return mat; }// 对Mat对象进行输出测试 public static void printMat(Mat mat){ for (int i=0; i
更多相关文章
- Android超级终端文件处理命令
- ubuntu下反翻译android apk
- Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户
- Android(安卓)JNI 学习之Android.mk文件
- i.mx51开发板利用已有的镜像文件(SD卡启动)刷写Android
- 分析Cocos2d Android(安卓)项目的生成和运行
- Android(安卓)Apk 打包
- Android中application 全局变量
- Android(安卓)Studio:layout-sw600dp文件夹中创建activity_main.