Processing:Примеры/Размытие: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Processing панель перехода}}
{{Processing панель перехода}}
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Описание<ref>[https://processing.org/examples/blur.html processing.org - Blur]</ref>=
=Описание<ref>[https://processing.org/examples/blur.html processing.org - Blur]</ref>=
Строка 82: Строка 79:
}}
}}


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
float v = 1.0 / 9.0;
float v = 1.0 / 9.0;
float[][] kernel = {{ v, v, v },  
float[][] kernel = {{ v, v, v },  
Строка 147: Строка 144:
<references />
<references />


{{SEO
{{Навигационная таблица/Портал/Processing}}
|Заголовок статьи=Processing: Размытие / Онлайн справочник - wikihandbk.com
|Ключевые слова=processing, Размытие,Размытие в processing, пример Размытие, пример Размытие в processing
|Описание статьи=
|Изображение статьи для Open Graph=
|Адрес страницы для schemaNewsArticle=<nowiki>http://wikihandbk.com/wiki/Processing:Примеры/Размытие</nowiki>
|Изображение статьи для schemaNewsArticle=<nowiki></nowiki>
|Высота изображения статьи для schemaNewsArticle=
|Ширина изображения статьи для schemaNewsArticle=
|Дата публикации для schemaNewsArticle=2018-07-31
|Автор=Мякишев Е.А.
|Издатель=myagkij
|Логотип издателя для schemaNewsArticle=<nowiki>http://wikihandbk.com/ruwiki/images/6/61/Tech_geek_logo_1x.jpg</nowiki>
|Ширина логотипа издателя для schemaNewsArticle=60
|Высота логотипа издателя для schemaNewsArticle=45
}}
{{Навигационная таблица/Справочник языка Processing}}
{{Навигационная таблица/Processing/Примеры}}

Текущая версия от 07:56, 27 августа 2023

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


Описание[1]

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

Пример

float v = 1.0 / 9.0;
float[][] kernel = {{ v, v, v }, 
                    { v, v, v }, 
                    { v, v, v }};
                    
PImage img;

void setup() {
  size(640, 360);
  img = loadImage("moon.jpg"); // загружаем исходное изображение
  noLoop();
} 

void draw() {
  image(img, 0, 0); // рисуем изображение на точке (0,0) 
  img.loadPixels();

  // создаем непрозрачное изображение
  // того же размера, что и оригинал:
  PImage edgeImg = createImage(img.width, img.height, RGB);

  // при помощи двух циклов for()
  // поочередно проходим через каждый пиксель на экране:
  for (int y = 1; y < img.height-1; y++) {   // пропускаем верхний
                                             // и нижний края
    for (int x = 1; x < img.width-1; x++) {  // пропускаем левый
                                             // и правый края
      float sum = 0; // переменная, хранящая «суммарный цвет»,
                     // который будет задан текущему пикселю-ядру
      for (int ky = -1; ky <= 1; ky++) {
        for (int kx = -1; kx <= 1; kx++) {
          // рассчитываем позицию очередного пикселя матрицы; 
          // всего для текущего пикселя-ядра
          // будут рассчитаны позиции для 9 пикселей:
          int pos = (y + ky)*img.width + (x + kx);
          // это монохромное изображение,
          // поэтому красный, зеленый и синий каналы идентичны:
          float val = red(img.pixels[pos]);
          // умножаем считанное значение очередного пикселя матрицы
          // на значение в массиве «kernel» (1/9 = 0,111...);
          // затем итоговые значения всех 9 пикселей будут сложены,
          // а результат будет записан в переменную «sum»:
          sum += kernel[ky+1][kx+1] * val;
        }
      }
      // задаем пикселю монохромный «суммарный цвет» 
      // (переменная «sum»), рассчитанный на основе
      // всех 9 пикселей матрицы:
      edgeImg.pixels[y*img.width + x] = color(sum);
    }
  }
  // обновляем пиксели в массиве «edgeImg.pixels[]»:
  edgeImg.updatePixels();

  image(edgeImg, width/2, 0); // рисуем новое изображение
}

См.также

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