opencv filter2D 过滤器 亮化  边缘检测 锐化 框模糊 高斯模糊 浮雕

opencv filter2D 过滤器 亮化 边缘检测 锐化 框模糊 高斯模糊 浮雕


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()

发表回复

您的电子邮箱地址不会被公开。