Processing:Примеры/Обнаружение границ объектов
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Описание[1]
Высокочастотный фильтр, увеличивающий резкость изображения. Эта программа анализирует каждый пиксель изображения относительно его соседних пикселей, а затем на основе этой информации увеличивает резкость изображения.
Этот скетч в данный момент плохо работает в режиме JavaScript.
Пример
float[][] kernel = {{ -1, -1, -1},
{ -1, 9, -1},
{ -1, -1, -1}};
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]);
// умножаем цветовое значение пикселя
// на значение внутри матрицы (1/9 = 0.111...),
// а затем суммируем результаты 9 пикселей матрицы,
// получая в результате «суммарный цвет»
// в виде переменной «sum»:
sum += kernel[ky+1][kx+1] * val;
}
}
// задаем этот монохромный «суммарный цвет»
// соответствующему пикселю на новом изображении:
edgeImg.pixels[y*img.width + x] = color(sum, sum, sum);
}
}
// обновляем данные внутри массива «edgeImg.pixels[]»:
edgeImg.updatePixels();
image(edgeImg, width/2, 0); // рисуем новое изображение
}
См.также
Внешние ссылки
Примеры на Processing | |
---|---|
Основы |
|
Продвинутые графические эффекты |
|
Примеры из сторонних библиотек |