Чтобы ответить на вторую часть вашего вопроса, размытие по Гауссу - это просто трехмерная гауссова поверхность, применяемая в качестве ядра свертки над изображением. Википедия имеет прекрасную ссылку на сам алгоритм, но в основном вы берете значения гауссовой кривой и конвертируете ее в квадратную матрицу и умножаете ее на каждый пиксель изображения, например:
Kernel:
[0 1 2 0 0
1 4 6 4 1 X Iterate over every single pixel in the image
2 6 10 6 2
1 4 6 4 1
0 1 2 1 0]
(Обратите внимание, что это просто пример ядра, есть очень специфические уравнения, которые, в зависимости от ваших гауссовых переменных, вы получите разные результаты)
Чтобы ответить на вопрос о производительности вашего вопроса, общая скорость этого алгоритма будет зависеть от нескольких факторов, если предположить, что изображение постоянного размера. Допустим, изображение составляет NxM пикселей, а ядро свертки - PxP пикселей. Вам нужно будет выполнить операции P P N * M. Чем больше P, тем больше операций вам придется выполнить для данного изображения. Вы можете стать хитрым с алгоритмом, который вы здесь используете, выполняя очень специфическую математику на основе строк или столбцов.
Реализация также очень важна. Если вы хотите быть чрезвычайно эффективным, вы, вероятно, захотите использовать самые продвинутые инструкции, которые предлагает ваша архитектура. Если вы используете чип Intel x86, вам, вероятно, захочется взглянуть на получение лицензии на примитивы производительности Intel (IPP) и непосредственный вызов этих инструкций. IIRC, OpenCV использует IPP, когда он доступен ...
Вы также можете сделать что-то очень умное и работать со всеми масштабированными целыми числами, если производительность с плавающей запятой в вашей архитектуре плохая. Возможно, это немного ускорит процесс, но я бы сначала посмотрел на другие варианты, прежде чем идти по этому пути.