【发布时间】:2020-02-11 11:22:21
【问题描述】:
我正在尝试创建一个卷积核,中间将是 1.5。不幸的是,我一直在思考如何做到这一点。我正在尝试创建类似的东西
Array = [
[0 , 1 , 0]
[1 , 1.5 , 1]
[0 , 1 , 0]
]
【问题讨论】:
标签: python numpy opencv image-processing convolution
我正在尝试创建一个卷积核,中间将是 1.5。不幸的是,我一直在思考如何做到这一点。我正在尝试创建类似的东西
Array = [
[0 , 1 , 0]
[1 , 1.5 , 1]
[0 , 1 , 0]
]
【问题讨论】:
标签: python numpy opencv image-processing convolution
由于 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。以下是一些常见的内核和卷积后的结果。使用此输入图像:
锐化内核
sharpen = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
拉普拉斯核
laplacian = np.array([[0, 1, 0],
[1, -4, 1],
[0, 1, 0]])
压纹内核
emboss = np.array([[-2, -1, 0],
[-1, 1, 1],
[0, 1, 2]])
大纲内核
outline = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
底部索贝尔
bottom_sobel = np.array([[-1, -2, -1],
[0, 0, 0],
[1, 2, 1]])
左索贝尔
left_sobel = np.array([[1, 0, -1],
[2, 0, -2],
[1, 0, -1]])
正确的索贝尔
right_sobel = np.array([[-1, 0, 1],
[-2, 0, 2],
[-1, 0, 1]])
顶级索贝尔
top_sobel = np.array([[1, 2, 1],
[0, 0, 0],
[-1, -2, -1]])
【讨论】:
a = np.ones((N, N)); a[N//2, N//2] = 1.5。另请查看scipy.signal 和scipy.ndimage。