乐趣区

关于opencv:opencv高斯滤波

1. 获取原图大小

img = cv2.imread("text.jpg")
h, w = img.shape[:2]

测试图片是一张 256×256×3 的图片

2. 图像补 0

# 设置卷积核大小
K_size = 3

pad = K_size // 2
out = np.zeros((h + pad * 2, w + pad * 2, 3), dtype=np.cfloat)
out[pad: pad + h, pad: pad + w] = img.copy().astype(np.cfloat)

若 K_size = 21, 图像就会在四周补充 20 个像素的 0:

3. 创立高斯卷积核

# 设置标准差 sigma
sigma = 1.3

K = np.zeros((K_size, K_size), dtype=np.cfloat)
 for x in range(-pad, -pad + K_size):
     for y in range(-pad, -pad + K_size):
         K[y + pad, x + pad] = np.exp(-(x ** 2 + y ** 2) / (2 * (sigma ** 2)))
K /= (2 * np.pi * sigma * sigma)
K /= K.sum()

4. 进行高斯滤波

tmp = out.copy()
    for y in range(h):
    for x in range(w):
        for z in range(3):
            out[pad + y, pad + x, z] = np.sum(K * tmp[y: y + K_size, x: x + K_size, z])

out = np.clip(out, 0, 255)
out = out[pad: pad + H, pad: pad + W].astype(np.uint8)

当卷积核的大小为 3,标准差为 1.3 时:

5. 高斯滤波使用

高斯滤波在图像处理概念下,将图像频域解决和时域解决相分割,作为低通滤波器应用,能够将低频能量(比方噪声)滤去,起到图像平滑作用,会使得图像变得含糊。因为 text 图是一张平滑的图片故看不出成果,应用:

能失去:

可能更加平滑,看起来也更加含糊。

退出移动版