#高斯均值
#用滤波核和图像进行卷积运算
import cv2
import numpy as np
img = cv2.imread('car.jpg', 1) #读取图片
#dst = cv2.GaussianBlur(img, (5, 5), 1, 5) #直接高斯滤波
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): #模板6*6
for j in range(3, width-3):
(b, g, r) = img[i, j]
sum_b = int(0)
sum_g = int(0)
sum_r = int(0)
for m in range(-3, 3):
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)
b = np.uint8(sum_b/36) #36个像素除以36
g = np.uint8(sum_g / 36)
r = np.uint8(sum_r / 36)
dst[i, j] = (b, g, r)
cv2.imshow('dst', dst)
cv2.waitKey(0)
#中值
#中值滤波:中间值代替原来像素值
import cv2
import numpy as np
img = cv2.imread('car.jpg', 1) #读取图片
imgInfo = img.shape #维度信息
height = imgInfo[0]
width = imgInfo[1]
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('src', img)
dst = np.zeros((height, width, 3), np.uint8)
collect = np.zeros(9, np.uint8)
for i in range(1, height-1): #防止越界
for j in range(1, width-1):
k = 0
for m in range(-1, 2): #模板3*3
for n in range(-1, 2):
gray = img[i+m, j+n]
collect[k] = gray
k = k + 1
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
dst[i, j] = collect[4]
cv2.imshow('dst', dst)
cv2.waitKey(0)