中值滤波步骤:
- 读取原图信息
- 读取灰度图
- 将指定矩形内的灰度值装入一维数组
- 将9个数排序
- 取中值
- 显示中值滤波后的图片
# 中值滤波 3*3模板
import cv2
import numpy as np
# 1 读取原图信息
img = cv2.imread('1.jpg', 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 2 读取灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = np.zeros((height, width, 3), np.uint8)
collect = np.zeros(9, np.uint8)
# 防止越界从1开始 对应以下从-1开始
for i in range(1, height - 1):
for j in range(1, width - 1):
k = 0
# 3 将指定矩形内的灰度值装入一维数组collect
for m in range(-1, 2): # -1 0 1
for n in range(-1, 2):
grayValue = gray[i + m, j + n]
collect[k] = grayValue
k += 1
# 4 将9个数排序
for k in range(0, 9):
p1 = collect[k]
for t in range(k + 1, 9):
if p1 < collect[t]:
mid = collect[t]
collect[t] = p1
p1 = mid
# 5 取中值
dst[i, j] = collect[4]
# 6 显示中值滤波后的图片
cv2.imshow('src', img)
cv2.imshow('gray', gray)
cv2.imshow('dst', dst)
cv2.waitKey(0)
结果如下:
image.png
网友评论