Processing:Примеры/Размытие
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Описание[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); // рисуем новое изображение
}
См.также
Внешние ссылки
Примеры на Processing | |
---|---|
Основы |
|
Продвинутые графические эффекты |
|
Примеры из сторонних библиотек |