Processing:Примеры/Гистограмма

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Описание[1]

Этот скетч-пример рассчитывает и показывает гистограмму изображения. Гистограмма – это способ графического отображения данных, и в этом скетче рассчитывается и показывается распределение уровней серого на изображении. На левом краю показано количество значений белого, а на правом краю – количество значений черного. Значения между этими двумя «полюсами» – это промежуточные значения (оттенки) серого: от наиболее светлого (слева) к наиболее темному (справа).

Примечание: На Android этот скетч будет вести себя по-другому, потому что цветовая информация большинства изображений уже не имеет 24-битную глубину.

Пример

size(640, 360);

// загружаем изображение из папки данных скетча;
// чтобы загрузить какое-то другое изображение,
// отредактируйте фрагмент "frontier.jpg",
// вписав туда название своего изображения:
PImage img = loadImage("frontier.jpg");
image(img, 0, 0);
int[] hist = new int[256];

// рассчитываем гистограмму:
for (int i = 0; i < img.width; i++) {
  for (int j = 0; j < img.height; j++) {
    int bright = int(brightness(get(i, j)));
    hist[bright]++; 
  }
}

// находим самое высокое значение гистограммы:
int histMax = max(hist);

stroke(255);
// рисуем половину гистограммы (пропускаем каждое второе значение):
for (int i = 0; i < img.width; i += 2) {
  // подгоняем значение «i» (начиная с «0» и до «img.width»)
  // к позиции на гистограмме (0-255):
  int which = int(map(i, 0, img.width, 0, 255));
  // конвертируем значение гистограммы в координату на оси Y:
  int y = int(map(hist[which], 0, histMax, img.height, 0));
  line(i, img.height, i, y);
}

См.также

Внешние ссылки