Автор оригинала: 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 ().