【基础】2D卷积
1. 引入
openCV提供了多种滤波方式来实现平滑图像的效果,例如均值滤波、高斯滤波、中值滤波等。大多数滤波方式所使用的卷积核都具有一定的灵活性,能够方便地设置卷积核的大小和数值。但是,我们也希望使用特定的卷积核实现卷积操作,例如使用如下卷积核进行卷积操作。

上一节介绍的三种滤波方式都无法将卷积核设定为以上形式,这时就要使用openCV的自定义卷积函数。
2. filter2D函数
在openCV中,提供了cv2.filter2D()函数进行卷积操作,其语法格式为:
dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
dst:返回值,表示2D卷积结果src:原始图像,即输入图像,它可以有任意数量的通道,并且可以对各个通道独立进行卷积处理ddepth:卷积处理结果图像的图像深度,一般使用-1,表示与原始图像使用相同的图像深度kernel:卷积核。
dst,anchor,delta,borderType 可选参数,默认即可
3. 程序演示
Tip:自定义一个卷积核,通过cv2.filter2D()对图像进行卷积操作,并显示滤波结果。
实现均值滤波
"""
Author: Will Wang
Email: WillWang1998@163.com
"""
import cv2
import numpy as np
kernel = np.array([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]
]) / 9
image = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
result = cv2.filter2D(image, -1, kernel)
image_stack = np.hstack((image, result))
cv2.imshow('image_stack', image_stack)
cv2.waitKey(0)
cv2.destroyAllWindows()
