Применить GaussianBlur к отдельным пикселям

Я пишу приложение на C ++, используя OpenCV, чтобы применить фильтр Гаусса к отдельным пикселям изображения. Например, я перебираю каждый пиксель в изображении и, если они соответствуют определенному значению RGB, я хочу применить алгоритм Гаусса только к тем пикселям, чтобы размытие происходило только вокруг этих частей изображения.

Тем не менее, я не могу найти способ сделать это. GaussianBlur() Функция, предлагаемая библиотекой OpenCV, позволяет только размыть изображение целиком, а не просто применять алгоритм и ядро ​​к одному пикселю за раз. Есть ли у кого-нибудь идеи о том, как мне этого добиться (например, есть ли другой метод, о котором я не знаю)? Я надеюсь, что мне не нужно самому писать весь алгоритм, чтобы применить его к одному пикселю.

4

Решение

Мой друг придумал хорошее решение:

  • клонировать исходную матрицу
  • применять GaussianBlur() клону
  • сравнить каждый пиксель со значением RGB
  • если совпадают, замените пиксель оригинала на пиксель клона

Не могу поверить, насколько это было просто.

3

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

Вы можете кодировать размытие по Гауссу самостоятельно, если вам нужно применить его только к нескольким пикселям. Это намного проще, чем вы думаете, и занимает всего несколько строк. Это просто оператор трафарета используя Гауссова функция для его ядра. Все, что вам нужно, это координаты пикселя и его соседей.

Остальное прямо вперед. Вот пример гауссовой матрицы, которую вы можете легко закодировать или сгенерировать с помощью гауссовой функции:

Пример гауссовой матрицы размытия

Короче говоря, это просто средневзвешенное значение соседних значений.

1

По вопросам рекламы [email protected]