1. 下载读取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.jar

    PS:该部分文章参考自lz3018的Java读取mat文件。

  2. 进行.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();
  1. 通过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);
  1. 运行结果:

    PS:在使用的时候,会发出一个错误,不影响运行结果。暂时不知道怎么解决,求告知。
  2. 完整代码:
/**     * 根据地址加载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

更多相关文章

  1. Android超级终端文件处理命令
  2. ubuntu下反翻译android apk
  3. Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户
  4. Android(安卓)JNI 学习之Android.mk文件
  5. i.mx51开发板利用已有的镜像文件(SD卡启动)刷写Android
  6. 分析Cocos2d Android(安卓)项目的生成和运行
  7. Android(安卓)Apk 打包
  8. Android中application 全局变量
  9. Android(安卓)Studio:layout-sw600dp文件夹中创建activity_main.

随机推荐

  1. 【转】Android(安卓)用户事件输入路径(Me
  2. Android手势:单指拖动、双指缩放图片
  3. Android布局属性android:clipToPadding的
  4. [无线] 让Android支持cmwap上网
  5. Android(安卓)XML解析器的问题
  6. Android(安卓)SystemProperties
  7. Eclipse将android 类编译为jar类库
  8. 二,HelloWorld 及源码关联 & Manifest 类
  9. [Android]AndroidDesign中ActionBar探究1
  10. Android中Thread、Handler、Looper、Mess