2013-04-06 3 views
4

У меня есть база данных изображений, и я хочу хранить RGB-матрицу этого изображения в mysql db отдельно (Forexample: redMatrix_column, greenMatrix_column, blueMatrix_column). В Matlab я могу получить RBG-матрицу отдельно, используя функцию imread(). Как это сделать в java? Спасибо за вашу помощь.Как получить матрицу rgb изображения отдельно?

ответ

6

Это, как вы получите цветовые компоненты:

public class GetImageColorComponents { 
    public static void main(String... args) throws Exception { 
    BufferedImage img = ImageIO.read(GetImageColorComponents.class 
            .getResourceAsStream("/image.png")); 
    int[] colors = new int[img.getWidth() * img.getHeight()]; 
    img.getRGB(0, 0, img.getWidth(), img.getHeight(), colors, 0, img.getWidth()); 

    int[] red = new int[colors.length]; 
    int[] green = new int[colors.length]; 
    int[] blue = new int[colors.length]; 

    for (int i = 0; i < colors.length; i++) { 
     Color color = new Color(colors[i]); 
     red[i] = color.getRed(); 
     green[i] = color.getGreen(); 
     blue[i] = color.getBlue(); 
    } 
    } 
} 

См this gist для полного примера с сохранения и извлечения байтов в базе данных MySQL.

+0

Большое спасибо. Я сравнил ваш красный канал с красным каналом Matlab и тот же :) Еще раз спасибо. – GltknBtn

+0

Спасибо за ваш смысл, но когда я использовал «байт» вместо «int», я получаю отрицательное значение в зеленых [], красных [], синих [] массивах. Это проблема? Еще раз спасибо. – GltknBtn

+0

Я думаю, что это связано с подписанным байтом. Потому что если значение> = 128, то это отрицательное значение. – GltknBtn

Смежные вопросы