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

将Mat对象中的图像转换为Android中的浮点数组,android,opencv,Android,Opencv,我正在用Android阅读一幅图像,我想访问图像的像素值 我正在读这样的图片 Mat img1 = new Mat(); img1 = Highgui.imread(filePath1); 有没有有效的方法将Mat对象转换为浮点数组 目前,我正在这样做&这是非常缓慢的 private float[][] convertToFloatArray(String filePath1){ img1 = Highgui.imread(filePath1); String output

我正在用Android阅读一幅图像,我想访问图像的像素值

我正在读这样的图片

Mat img1 = new Mat();
img1 = Highgui.imread(filePath1);
有没有有效的方法将Mat对象转换为浮点数组

目前,我正在这样做&这是非常缓慢的

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;
        }
    }
private float[]convertToFloatArray(字符串文件路径1){
img1=Highgui.imread(filePath1);
字符串输出=img1.dump();
float[][]flt=newfloat[img1.rows()][img1.cols()];
//最慢的步骤,但必须移除[,;等。
字符串数组1[]=output.split([^0-9]+”);
int k=0;

对于(int i=0;i您提到的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;
        }
    }
intk=0;

对于(inti=0;i),我能够找到一个解决方案

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

真不敢相信你应该先转储到一个字符串。然后拆分字符串以获得像素值。肯定有一种更简单的方法。你为什么需要浮点?为什么不需要整数?@greenapps:即使是整数也可以。你知道一种转换为整数的方法吗?我什么都不知道。我只是想知道为什么你会先将所有内容转储到一个字符串,然后拆分字符串值。我说我认为会有其他更好的方法。你对此没有反应。如果我知道更好的方法,我不会在这里问。^-^静态转换在Java中不是一件事。这不起作用