将Mat对象中的图像转换为Android中的Float数组

时间:2017-11-07 05:24:50

标签: android opencv

我正在Android中阅读图片,我想访问图片的像素值。

我正在阅读像这样的图像

Mat img1 = new Mat();
img1 = Highgui.imread(filePath1);

有没有一种有效的方法将Mat对象转换为float数组?

目前,我正在这样做&这很慢。

private float[][] convertToFloatArray(String filePath1){

    img1 = Highgui.imread(filePath1);
    String output = img1.dump();
    float[][] flt = new float[img1.rows()][img1.cols()];

    // slowest step but necessary to remove [, ;, etc.
    String array1[] = output.split("[^0-9]+"); 

    int k = 0;
    for(int i = 0;i<img1.rows();i++) {
        for(int j = 0;j<img1.cols();j++) {
            flt[i][j] = (Float.valueOf(array1[k])).floatValue();
            k += 1;
        }
    }

2 个答案:

答案 0 :(得分:1)

能够找到解决方案

        img1 = new Mat();
        img1 = Highgui.imread(filePath1, 0);
        int buff[] = new int[(int)img1.total() * img1.channels()];
        img1.get(0, 0, buff);
        return buff;

答案 1 :(得分:0)

你提到int数组会很好。您可以跳过上面使用的字符串浮点数和字符串行,只需使用它:

  int k = 0;
    for(int i = 0;i<img1.rows();i++) {
        for(int j = 0;j<img1.cols();j++) {
            int_arr[i][j] = static_cast<unsigned>(img1.data[k]);
            k += 1;
        }
    }

还要跟踪您拥有的频道数量。