在本文中,我们将了解 OpenCV 中的 filter2d() 函数。简而言之,使用此函数,我们可以将图像与内核(通常是二维矩阵)进行卷积,以对图像应用过滤器。
用法: filter2D (src, dst, ddepth, kernel)
Parameters:
- Src -应用过滤器的源图像。
- Dst - 应用过滤器后输出图像的名称
- Ddepth -输出图像的深度 [-1 将给出与输入图像相同的输出图像深度]
- Kernel -我们希望图像与之卷积的二维矩阵。
使用此函数,我们可以在图像和给定内核之间创建卷积,以创建图像中的平滑和模糊、锐化和边检测等过滤器。此函数将简单地将 2d 矩阵与像素级图像进行卷积并生成输出图像。要理解这个概念,我们将首先浏览内核的概念。
内核:卷积或卷积矩阵中使用的简单二维矩阵或用于模糊、锐化和边检测图像的掩码。
内核的工作:那么,这个内核是如何工作的?让我们看看,我们都知道图像在 OpenCV 中表示为像素值。这些像素被排列为矩阵以形成图像,并且我们知道内核是一个简单的 2d 矩阵,其中基于内核的函数具有特定值,就像内核用于模糊和锐化图像时不同。
举个例子,在这张图片中,前 3 行和前 3 列就像一个矩阵,我们有一个 3 x 3 矩阵的内核。如图所示,图像中的每个像素都有一个像素值(即像素强度)。现在卷积是通过将每个像素值的值与相应位置的内核值相乘来完成的,并通过乘以并形成一个像素(在这种情况下为中心像素,它是 [ 2,2])。并且对图像中的其余像素值矩阵重复此方法。
卷积的工作
注意:我们有特定的内核 [2d 卷积矩阵] 来执行特定的任务,例如模糊、锐化和边检测。并且图像中显示的内核只是一个示例,而不是任何特定的内核。
一些常见的内核是,
- 身份内核
- 边检测内核
- 锐化内核
- 框模糊核
- 高斯模糊核
不同的内核
使用这些内核,我们可以通过简单地将图像的像素值和内核中的值进行卷积来形成过滤后的图像。
使用 2d 卷积矩阵模糊图像
我们正在通过 NumPy 创建一个如下所示的内核,并将内核作为 filter2d 函数的参数传递。
np.ones() will create an array of the desired shape filled all with the ones
模糊内核
示例 1:使用 2d 卷积矩阵模糊图像
Python3
# importing the modules needed
import cv2
import numpy as np
# Reading the image
image = cv2.imread('image.png')
# Creating the kernel(2d convolution matrix)
kernel1 = np.ones((5, 5), np.float32)/30
# Applying the filter2D() function
img = cv2.filter2D(src=image, ddepth=-1, kernel=kernel1)
# Shoeing the original and output image
cv2.imshow('Original', image)
cv2.imshow('Kernel Blur', img)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
使用 2d 卷积矩阵模糊图像
示例 2:边检测具有 2d 卷积矩阵的图像
我们正在通过 NumPy 数组创建一个内核,看起来像这样,并将内核作为 filter2d 函数的参数传递。
边检测内核
Python3
# importing the modules needed
import cv2
import numpy as np
# Reading the image
image = cv2.imread('image.png')
# Creating the kernel(2d convolution matrix)
kernel2 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
# Applying the filter2D() function
img = cv2.filter2D(src=image, ddepth=-1, kernel=kernel2)
# Shoeing the original and output image
cv2.imshow('Original', image)
cv2.imshow('Kernel Blur', img)
cv2.waitKey()
cv2.destroyAllWindows()
输出:
边检测具有二维卷积矩阵的图像
相关用法
- Python OpenCV setWindowTitle()用法及代码示例
- Python OpenCV resizeWindow()用法及代码示例
- Python OpenCV waitKey()用法及代码示例
- Python OpenCV waitKeyEx()用法及代码示例
- Python OpenCV getRotationMatrix2D()用法及代码示例
- Python OpenCV destroyAllWindows()用法及代码示例
- Python OpenCV namedWindow()用法及代码示例
- Python OpenCV selectroi()用法及代码示例
- Python OpenCV imdecode()用法及代码示例
- Python OpenCV getTrackbarPos()用法及代码示例
- Python OpenCV Canny()用法及代码示例
- Python OpenCV setTrackbarPos()用法及代码示例
- Python OpenCV getgaussiankernel()用法及代码示例
- Python OpenCV haveImageReader()用法及代码示例
注:本文由纯净天空筛选整理自sanjaysdev0901大神的英文原创作品 Python OpenCV – Filter2D() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。