размытие — размытие изображения в C ++ / C

Поэтому я начинаю проект по обработке изображений с C ++.

Дело в том, что все, что я нахожу в Интернете по этому вопросу (размытие изображения в C ++), поставляется либо с CUDA, либо с OpenCV.

Есть ли способ размыть изображение только в C ++? (для начинающих)

Если да, может кто-нибудь поделиться кодом или объяснить?

Спасибо!

-4

Решение

Во-первых, вам нужно изображение в памяти.

Затем вам нужен второй буфер для использования в качестве рабочей области.

Тогда вам нужен фильтр. Общий фильтр будет

          1   4  1
4 -20  4
1   4  1

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

Применять небольшой фильтр очень просто.

          for(y=0;y<height;y++)
for(x=0;x<width;x++)
{
total = image[(y+1)*width+x+1];
for(fy=0; fy < 3; fy++)
for(fx = 0; fx < 3; fx++)
total += image[(y+fy)*width+x+fx] * filter[fy*3+x];
output[(y+1)*width+x+1] = clamp(total, 0, 255);

}

Вам нужно в специальном случае края, что просто неудобно, но не добавляет теоретической сложности.

Когда мы используем более быстрые алгоритмы, чем наивный, становится важно правильно настроить ребра. Затем вы делаете вычисления в частотной области, и это намного быстрее с большим фильтром.

2

Другие решения

Если вы хотите реализовать размытие самостоятельно, вам нужно каким-то образом сохранить изображение в памяти. Если у вас есть черно-белое изображение,

unsigned char[width*height]

может быть достаточно для хранения изображения; если это цветное изображение, возможно, у вас будет тот же массив, но в три или четыре раза больше размера (один для каждого цветового канала и один для так называемого альфа-значения, которое описывает непрозрачность).

Для черно-белого случая вы должны суммировать соседей каждого пикселя и вычислить его среднее значение; этот подход переходит к цветным изображениям путем применения операции к каждому цветному каналу.

Операция, описанная выше, является частным случаем так называемой фильтр ядра, который также может быть использован для реализации различных операций.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector