Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Processing:Примеры/Размытие

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


Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Ambox content.png Черновик


Описание[1]

Низкочастотный фильтр, размывающий изображение. Программа анализирует каждый пиксель изображения и смешивает его с соседними пикселями, в итоге создавая размытие.

Пример

  1. float v = 1.0 / 9.0;
  2. float[][] kernel = {{ v, v, v },
  3.                     { v, v, v },
  4.                     { v, v, v }};
  5.                    
  6. PImage img;
  7.  
  8. void setup() {
  9.   size(640, 360);
  10.   img = loadImage("moon.jpg"); // загружаем исходное изображение
  11.   noLoop();
  12. }
  13.  
  14. void draw() {
  15.   image(img, 0, 0); // рисуем изображение на точке (0,0)
  16.   img.loadPixels();
  17.  
  18.   // создаем непрозрачное изображение
  19.   // того же размера, что и оригинал:
  20.   PImage edgeImg = createImage(img.width, img.height, RGB);
  21.  
  22.   // при помощи двух циклов for()
  23.   // поочередно проходим через каждый пиксель на экране:
  24.   for (int y = 1; y < img.height-1; y++) {   // пропускаем верхний
  25.                                              // и нижний края
  26.     for (int x = 1; x < img.width-1; x++) {  // пропускаем левый
  27.                                              // и правый края
  28.       float sum = 0; // переменная, хранящая «суммарный цвет»,
  29.                      // который будет задан текущему пикселю-ядру
  30.       for (int ky = -1; ky <= 1; ky++) {
  31.         for (int kx = -1; kx <= 1; kx++) {
  32.           // рассчитываем позицию очередного пикселя матрицы;
  33.           // всего для текущего пикселя-ядра
  34.           // будут рассчитаны позиции для 9 пикселей:
  35.           int pos = (y + ky)*img.width + (x + kx);
  36.           // это монохромное изображение,
  37.           // поэтому красный, зеленый и синий каналы идентичны:
  38.           float val = red(img.pixels[pos]);
  39.           // умножаем считанное значение очередного пикселя матрицы
  40.           // на значение в массиве «kernel» (1/9 = 0,111...);
  41.           // затем итоговые значения всех 9 пикселей будут сложены,
  42.           // а результат будет записан в переменную «sum»:
  43.           sum += kernel[ky+1][kx+1] * val;
  44.         }
  45.       }
  46.       // задаем пикселю монохромный «суммарный цвет»
  47.       // (переменная «sum»), рассчитанный на основе
  48.       // всех 9 пикселей матрицы:
  49.       edgeImg.pixels[y*img.width + x] = color(sum);
  50.     }
  51.   }
  52.   // обновляем пиксели в массиве «edgeImg.pixels[]»:
  53.   edgeImg.updatePixels();
  54.  
  55.   image(edgeImg, width/2, 0); // рисуем новое изображение
  56. }

См.также

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

  1. processing.org - Blur