opencv-高斯滤波

1.获取原图大小

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

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

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

当sigma为1.3时,最终会得到这样的高斯卷积核K:
opencv-高斯滤波_第1张图片
卷积核图像绘制可见:https://segmentfault.com/a/1190000044158403

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时:
3_1.3

5.高斯滤波运用

高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用,会使得图像变得模糊。由于text图是一张平滑的图片故看不出效果,使用:
测试图

能得到:
3_1.3text
能够更加平滑,看起来也更加模糊。

你可能感兴趣的:(opencv-高斯滤波)