将Android图像转换为MATLAB可以读取的文件

时间:2015-06-14 11:55:10

标签: android image matlab image-processing bitmap

我正在开发一个与使用MATLAB进行图像识别相关的项目,我目前正在使用Android应用来帮助完成一些预处理步骤。我认为使用矩阵而不是位图很容易。我终于设法完成我的算法并将其导入Eclipse。问题是我意识到我不知道如何将Bitmap图像转换为MATLAB可以读入的算法。

您对我如何做到这一点有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果我正确解释您的问题,您的图像存储在Bitmap类中,并且您希望将其保存到Android设备上的本地文件中。然后,您需要将此图像加载到MATLAB中以用于图像识别算法。

鉴于您的图片通过Android存储在内存中,您可以使用方法compresshttp://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream

然后您使用它并将图像保存到文件,然后您可以使用imread将其加载到MATLAB中。

以下是您可以为Android应用编写的示例代码。假设您的Bitmap实例存储在名为bmp的变量中,请执行:

FileOutputStream out = null; // For writing to the device
String filename = "out.png"; // Output file name

// Full path to save
// This accesses the pictures directory of your device and saves the file there
String output = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), filename);

try {
    out = new FileOutputStream(filename); // Open up a new file stream
    // Save the Bitmap instance to file
    // First param - type of image
    // Second param - Compression factor
    // Third param - The full path to the file
    // Note: PNG is lossless, so the compression factor (100) is ignored
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); 
}
// Catch any exceptions that happen 
catch (Exception e) {
    e.printStackTrace();
} 
// Execute this code even if exception happens
finally {
    try {
        // Close the file if it was open to write
        if (out != null)
            out.close();
    } 
    // Catch any exceptions with the closing here
    catch (IOException e) {
        e.printStackTrace();
    }
}

以上代码会将图像保存到设备上的默认图片目录中。拉出图像后,可以使用imread

将图像读入MATLAB
im = imread('out.png');
因此,

im将成为图像的原始RGB像素,您现在可以将其用于图像识别算法。