本文使用高斯滤波api和均值滤波的源码实现图像滤波
高斯滤波:
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
dst = cv2.GaussianBlur(img, (5, 5), 1.5)
cv2.imshow('src', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
结果如下:
image.png
均值滤波:
实现步骤:
- 读取原图片
- 指定矩形内求像素和
- 求各通道均值
- 新通道值进行像素封装
- 显示均值滤波后的图片
import cv2
import numpy as np
# 1 读取原图片
img = cv2.imread('1.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height, width, 3), np.uint8)
for i in range(3, height - 3):
for j in range(3, width - 3):
sum_b = int(0)
sum_g = int(0)
sum_r = int(0)
# 2 指定矩形内求像素和
for m in range(-3, 3): # -3 ~ 2 一共遍历六个数
for n in range(-3, 3):
(b, g, r) = img[i + m, j + n]
sum_b = sum_b + int(b)
sum_g = sum_g + int(g)
sum_r = sum_r + int(r)
# 3 求各通道均值
b = np.uint8(sum_b / 36)
g = np.uint8(sum_g / 36)
r = np.uint8(sum_r / 36)
# 4 新通道值进行像素封装
dst[i, j] = (b, g, r)
# 5 显示均值滤波后的图片
cv2.imshow('dst', dst)
cv2.waitKey(0)
结果好像高斯滤波更模糊一些,另,由于没有处理边界,所以均值滤波后的图片四周有黑色。结果如下:
image.png
网友评论