我正在开发一个与使用MATLAB进行图像识别相关的项目,我目前正在使用Android应用来帮助完成一些预处理步骤。我认为使用矩阵而不是位图很容易。我终于设法完成我的算法并将其导入Eclipse。问题是我意识到我不知道如何将Bitmap
图像转换为MATLAB可以读入的算法。
您对我如何做到这一点有什么想法吗?
答案 0 :(得分:1)
如果我正确解释您的问题,您的图像存储在Bitmap
类中,并且您希望将其保存到Android设备上的本地文件中。然后,您需要将此图像加载到MATLAB中以用于图像识别算法。
鉴于您的图片通过Android存储在内存中,您可以使用方法compress
:http://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
:
im = imread('out.png');
因此, im
将成为图像的原始RGB像素,您现在可以将其用于图像识别算法。