创建一个python卷积核

5 python opencv numpy convolution cv2

我正在尝试创建一个卷积核,中间将是 1.5。不幸的是,我一直在思考如何做到这一点。我正在尝试创建类似的东西

Array = [
        [0 , 1 , 0]
        [1 , 1.5 , 1]
        [0 , 1 , 0]
]
Run Code Online (Sandbox Code Playgroud)

nat*_*ncy 10

由于 OpenCV 使用 Numpy 来显示图像,因此您可以使用 Numpy 简单地创建一个卷积核。

import numpy as np

convolution_kernel = np.array([[0, 1, 0], 
                               [1, 1.5, 1], 
                               [0, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

这是内核。注意类型是<class 'numpy.ndarray'>

[[0.  1.  0. ]
 [1.  1.5 1. ]
 [0.  1.  0. ]]
Run Code Online (Sandbox Code Playgroud)

要将内核与图像卷积,您可以使用cv2.filter2D(). 像这样的东西

import cv2

image = cv2.imread('1.png')
result = cv2.filter2D(image, -1, convolution_kernel)
Run Code Online (Sandbox Code Playgroud)

有关内核构造的更多信息,请查看。下面是一些常见的内核和卷积后的结果。使用此输入图像:

在此处输入图片说明

锐化内核

sharpen = np.array([[0, -1, 0], 
                    [-1, 5, -1], 
                    [0, -1, 0]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

拉普拉斯核

laplacian = np.array([[0, 1, 0], 
                      [1, -4, 1], 
                      [0, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

压纹内核

emboss = np.array([[-2, -1, 0], 
                   [-1, 1, 1], 
                   [0, 1, 2]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

大纲内核

outline = np.array([[-1, -1, -1], 
                    [-1, 8, -1], 
                    [-1, -1, -1]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

底部索贝尔

bottom_sobel = np.array([[-1, -2, -1], 
                         [0, 0, 0], 
                         [1, 2, 1]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

左索贝尔

left_sobel = np.array([[1, 0, -1], 
                       [2, 0, -2], 
                       [1, 0, -1]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

右下角

right_sobel = np.array([[-1, 0, 1], 
                        [-2, 0, 2], 
                        [-1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

顶级索贝尔

top_sobel = np.array([[1, 2, 1], 
                      [0, 0, 0], 
                      [-1, -2, -1]])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 根据您希望内核其余部分包含的内容,您可以执行 `a = np.ones((N, N)); a[N//2, N//2] = 1.5`。另请查看 [`scipy.signal`](https://docs.scipy.org/doc/scipy/reference/signal.html) 和 [`scipy.ndimage`](https://docs.scipy.org/ doc/scipy/reference/ndimage.html)。 (2认同)