Автор оригинала: Python Examples.
Python opencv – cv2.filter2d ()
Фильтрация изображений – это техника для фильтрации изображения, такого как одномерный аудиосигнал, но в 2D.
В этом руководстве мы узнаем, как фильтровать изображение с использованием 2D-свертки с функцией CV2.Filter2D (). Света происходит между исходным изображением и ядром.
Ядро – это еще один массив, который обычно меньше исходного изображения и определяет действие фильтрации. Ядро может быть высоким проходом, низким проходом или обычай, который может обнаружить определенные функции на изображении.
Фильтр с низким уровнем прохода больше похоже на усреднение процесса. Но с весами и охватом усреднения в зависимости от формы и содержимого ядра.
Высокий проходный фильтр похож на краевой детектор. Это дает высокое, когда существует значительное изменение в соседних значениях пикселей.
Кроме того, вы можете использовать пользовательский фильтр для обнаружения кругов, квадратов или некоторых пользовательских форм, которые вы хотели бы обнаружить на изображении.
Пример 1: OpenCV Low Pass Filter с 2D-сверткой
В этом примере мы выполним после последовательности шагов.
- Прочитайте изображение. Это наш источник.
- Определите фильтр с низким уровнем передачи. В этом примере наш фильтр Low Pass представляет собой массив 5 × 5 со всеми и усредненными.
- Применить свертка между исходным изображением и ядром с использованием функции CV2.Filter2d ().
Python Program
import numpy as np
import cv2
#read image
img_src = cv2.imread('sample.jpg')
#prepare the 5x5 shaped filter
kernel = np.array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
kernel = kernel/sum(kernel)
#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)
#save result image
cv2.imwrite('result.jpg',img_rst)Выход
Выходное изображение выглядит как все зернистая информация исчезнет или подобна, чтобы вы захватили изображение, которое не в фокусе.
Пример 2: OpenCV High Pass Filter с 2D-сверткой
В этом примере для фильтра высокого прохода мы выполним после следующей последовательности шагов.
- Прочитайте изображение. Это наш источник.
- Определите фильтр высокого прохода. В этом примере наш фильтр высокого прохода представляет собой массив 3 × 3, который является
ЯдроПеременная в следующей программе. - Применить свертка между исходным изображением и ядром с использованием функции CV2.Filter2d ().
Python Program
import numpy as np
import cv2
#read image
img_src = cv2.imread('sample.jpg')
#edge detection filter
kernel = np.array([[0.0, -1.0, 0.0],
[-1.0, 4.0, -1.0],
[0.0, -1.0, 0.0]])
kernel = kernel/(np.sum(kernel) if np.sum(kernel)!=0 else 1)
#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)
#save result image
cv2.imwrite('result.jpg',img_rst)Выход
Выходное изображение выглядит как все зернистая информация сохраняется, а остальные ушли.
Если вы измените массив ядра до следующего, информация о цвете сохраняется с выделенными областями высокочастотных пикселей.
kernel = np.array([[0.0, -1.0, 0.0],
[-1.0, 5.0, -1.0],
[0.0, -1.0, 0.0]])Пример 3 – пользовательское ядро
В этом примере мы определим пользовательское ядро, где он должен определять только горизонтальные линии, если таковые имеются.
Python Program
import numpy as np
import cv2
#read image
img_src = cv2.imread('sample.jpg')
#kernal sensitive to horizontal lines
kernel = np.array([[-1.0, -1.0],
[2.0, 2.0],
[-1.0, -1.0]])
kernel = kernel/(np.sum(kernel) if np.sum(kernel)!=0 else 1)
#filter the source image
img_rst = cv2.filter2D(img_src,-1,kernel)
#save result image
cv2.imwrite('result.jpg',img_rst)Выход
Вы можете написать свое собственное настраиваемое ядро и обнаруживать функцию из изображения.
Резюме
В этом руководстве примеров Python мы узнали, как фильтровать изображение или выполнить 2D-свертка с использованием функции CV2.Filter2d ().