filter2D (src, dst, ddepth, kernel)
src 应用过滤器的源图像。
dst 应用过滤器后输出图像的名称。
ddepth 输出图像的深度 [-1 将给出与输入图像相同的输出图像深度]。
kernel 我们希望图像与之卷积的二维矩阵。
import cv2 import numpy as np import matplotlib.pylab as plt import matplotlib as mpl # 读取图像 img = cv2.imread('demo.png') # 解决彩色图像出现色差问题 b, g, r = cv2.split(img) # 分别提取B、G、R通道 img_new = cv2.merge([r, g, b]) # 重新组合为R、G、B # 创建内核 # 亮化 kernel0 = np.array([[0, 0, 0], [0, 5, 0], [0, 0, 0]]) # 边缘检测 kernel1 = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]) # 锐化 kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]]) # 框模糊 kernel3 = np.ones((3, 3), np.float32)/9 # 高斯模糊 kernel4 = np.array([[1, 4, 6, 4, 1], [4, 16, 24, 16, 4], [6, 24, 36, 24, 6], [4, 16, 24, 16, 4], [1, 4, 6, 4, 1]]) # 浮雕 kernel5 = np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]]) # 过滤器 img0 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel0) img1 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel1) img2 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel2) img3 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel3) img4 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel4/256) img5 = cv2.filter2D(src=img_new, ddepth=-1, kernel=kernel5) # 显示图像 ''' cv2.imshow('old', image) cv2.imshow('new', img) cv2.waitKey() cv2.destroyAllWindows() ''' # 解决plt 画图中文不显示问题 mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体 mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号 # 显示图像 # plt.subplot(nrows, ncols, index) # 表示在当前画布的右上角创建一个1行3列的绘图区域,同时 选择在第 1 个位置绘制子图。 plt.subplot(1, 7, 1) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img_new) plt.title('原图') plt.subplot(1, 7, 2) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img0) plt.title('亮化') plt.subplot(1, 7, 3) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 # plt.imshow(blur, 'gray') plt.imshow(img1) plt.title('边检') plt.subplot(1, 7, 4) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img2) plt.title('锐化') plt.subplot(1, 7, 5) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img3) plt.title('框模糊') plt.subplot(1, 7, 6) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img4) plt.title('高斯模糊') plt.subplot(1, 7, 7) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img5) plt.title('浮雕') plt.show()