Преобразовать изображение в массив double
Для нейронной сети мне необходимо преобразовать изображение в массив double, значения должны быть от 0 до 255. Я пытался это делать так
public static double[] createArrayfromImage(BufferedImage inImage) {
double[] arr = new double[inImage.getHeight() * inImage.getWidth()];
int i = 0;
for (int y = 0; y < inImage.getHeight(); y++) {
for (int x = 0; x < inImage.getWidth(); x++) {
System.out.println(inImage.getRGB(x, y));
arr[i] =inImage.getRGB(x, y)/255;
i++;
}
}
return arr;
}
}
Но я не получаю значения в нужном цветовом диапазоне. Пытаюсь получить через массив байтов,но размерность байтового массива получается не такой как размерность изображения
public static byte[] createByteArray(BufferedImage inImage) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(inImage, "jpg", bos );
return bos.toByteArray();
}
double[] img = new double[28 * 28];
byte[] arre=Data.createByteArray(b);
for (int d = 0; d < img.length; d++) {
System.out.println(arre.length);
img[d] = (Data.createByteArray(b)[d] & 255) / 255.0;
}
Что я не так делаю?
Ответы (1 шт):
Во первых - arr[i] =inImage.getRGB(x, y)/255; здесь у вас целочисленное деление. Метод getRGB() возвращает значение типа int и вы делите его также на значение типа int. Замените целочисленный литерал 255 на литерал типа double (255.0) b почитайте про авто приведение типов в Java.
Во вторых - в каком формате вы хотите сохранить каждый пиксель и в каком формате их возвращает метод getRGB() (ARGB, RGBA ил может быть RGB)? Непонятно, что вы пытаетесь поместить в double - оттенок серого или какой один из компонентов цвета (r, g или b)? В общем - уточните вопрос.