Поскольку OpenCV использует Numpy для отображения изображений, вы можете просто создать сверточное ядро, используя Numpy.
import numpy as np
convolution_kernel = np.array([[0, 1, 0],
[1, 1.5, 1],
[0, 1, 0]])
Вот ядро. Обратите внимание, что тип <class 'numpy.ndarray'>
[[0. 1. 0. ]
[1. 1.5 1. ]
[0. 1. 0. ]]
Для свертывания ядра с изображением вы можете использовать cv2.filter2D()
. Примерно так:
import cv2
image = cv2.imread('1.png')
result = cv2.filter2D(image, -1, convolution_kernel)
Для получения дополнительной информации о построении ядра посмотрите this . Вот некоторые общие ядра и результат после свертки. Используя это входное изображение:
![enter image description here](https://i.stack.imgur.com/idlXE.jpg)
Заточка ядра
sharpen = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
![enter image description here](https://i.stack.imgur.com/WMv62.png)
ядро лапласиана
laplacian = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
![enter image description here](https://i.stack.imgur.com/VZUBZ.png)
Тиснение ядра
emboss = np.array([[-2, -1, 0],
[-1, 1, 1],
[0, 1, 2]])
![enter image description here](https://i.stack.imgur.com/EM8MP.png)
Схема ядра
outline = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
![enter image description here](https://i.stack.imgur.com/8bflR.png)
Нижний трезвый
bottom_sobel = np.array([[-1, -2, -1],
[0, 0, 0],
[1, 2, 1]])
![enter image description here](https://i.stack.imgur.com/vAXpm.png)
Левый sobel
left_sobel = np.array([[1, 0, -1],
[2, 0, -2],
[1, 0, -1]])
![enter image description here](https://i.stack.imgur.com/q42sh.png)
Правильный знак
right_sobel = np.array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]])
![enter image description here](https://i.stack.imgur.com/n7eWl.png)
Верхний трезвый
top_sobel = np.array([[1, 2, 1],
[0, 0, 0],
[-1, -2, -1]])
![enter image description here](https://i.stack.imgur.com/tbuLo.png)