Функции фильтрации изображений часто используются для предварительной обработки или настройки изображения перед выполнением более сложных операций. Эти операции помогают уменьшить шум или нежелательные отклонения изображения или порога.
В библиотеке OpenCV-Python доступны три фильтра.
- Фильтр размытия по Гауссу.
- Фильтр размытия эрозии.
- Дилатационный фильтр размытия.
Методы сглаживания изображения помогают нам уменьшить шум в изображении. В OpenCV сглаживание изображения (также называемое размытием) может выполняться разными способами. В этом посте мы подробно рассмотрим метод размытия по Гауссу Python cv2 — GaussianBlur().
Размытие по Гауссу
Фильтр Gaussian Blur сглаживает изображение, усредняя значения пикселей с его соседями. Это называется размытием по Гауссу, потому что среднее значение имеет эффект спада по Гауссу.
Это означает, что пиксели, расположенные ближе к целевому пикселю, оказывают большее влияние на среднее значение, чем пиксели, находящиеся далеко. Так работает сглаживание. Он часто используется как достойный способ сгладить шум в изображении перед другой обработкой.

Python cv2 GaussianBlur()
OpenCV-Python предоставляет функцию cv2.GaussianBlur() для применения сглаживания по Гауссу к входному исходному изображению.
Синтаксис
|
1 |
cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType) |
Параметры
| Параметры | Описание |
| src | Это входное изображение. |
| dst | Это выходное изображение. |
| ksize | Это размер ядра по Гауссу. [высота ширина]. Высота и ширина должны быть нечетными и могут иметь разные значения. Если ksize установлен в [0 0], то ksize вычисляется из значений сигма. |
| sigmaX | Это стандартное отклонение ядра вдоль оси X(горизонтальное направление). |
| sigmaY | Это стандартное отклонение ядра по оси Y(вертикальное направление). Если sigmaY=0, то для sigmaY берется значение sigmaX. |
| borderType | Определяет границы изображения, в то время как ядро применяется к границам изображения. Возможные значения: cv.BORDER_CONSTANT cv.BORDER_REPLICATE cv.BORDER_REFLECT cv.BORDER_WRAP cv.BORDER_REFLECT_101 cv.BORDER_TRANSPARENT cv.BORDER_REFLECT101 cv.BORDER_DEFAULT cv.BORDER_ISOLATED |
Возвращаемое значение
Метод cv2.GaussianBlur() возвращает размытое изображение n-мерного массива.
Пример
Напишите следующий код, демонстрирующий работу метода gaussianblur().
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# app.py import numpy as np import cv2 img = cv2.imread('data.png', 1) cv2.imshow('Original', img) blur_image = cv2.GaussianBlur(img,(3, 33), 0) cv2.imshow('Blurred Image', blur_image) cv2.waitKey(0) cv2.destroyAllWindows() |
Вывод:

Вы можете видеть, что левое — исходное изображение, а правое — размытое по Гауссу.
В методе GaussianBlur() вам необходимо каждый раз передавать значения src и ksize, а также одно, два или все значения параметров из оставшихся параметров sigmaX, sigmaY и borderType. Оба аргумента sigmaX и sigmaY становятся необязательными, если вы укажете значение ksize(размер ядра), отличное от(0,0).
Давайте воспользуемся методом GaussianBlur() с параметрами src, size и sigmaX.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# app.py import numpy as np import cv2 img = cv2.imread('data.png', 1) cv2.imshow('Original', img) blur_image = cv2.GaussianBlur(img,(5, 5), 5) cv2.imshow('Blurred Image', blur_image) cv2.waitKey(0) cv2.destroyAllWindows() |
Вывод:

Вы можете аналогичным образом изменить значения других параметров функции и наблюдать за выходными данными.
Заключение
В методе cv2.GaussianBlur() вместо блочного фильтра используется ядро Гаусса. Мы должны определить ширину и высоту ядра, которое должно быть положительным и нечетным, и оно вернет размытое изображение.
