实现目标:
实现空间域图像增强方法中的均值滤波器。
代码如下:
"""
Created on 2023/3/20 09:52
@author: liuwenq
实验一_空间域图像增强方法_均值滤波器
"""
import cv2
import copy
import matplotlib
import imutils
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
# 获取图像并转化为灰度图
img = cv2.imread('E:/11.PNG')
# gray_img = cv2.imread('E:/12.PNG',0)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转化为灰度图
# 利用已有函数实现
blur_img=cv2.blur(gray_img,(3,3))
cv2.imshow('blur_img',imutils.resize(blur_img,400))
# 手动实现
gray_avg_img=copy.deepcopy(gray_img)
for i in range(1,gray_img.shape[0]-1):
for j in range(1,gray_img.shape[1]-1):
sum_pix=sum([gray_img[l,k] for l in range(i-1,i+2) for k in range(j-1,j+2)]) # range函数写到i+2实际遍历到i+1,j+1同理
gray_avg_img[i,j]=int(sum_pix/9) # 9个点求和除均值,均值滤波实现
# cv2.imshow('gray_avg_img',imutils.resize(gray_avg_img,400))
# 输出结果
plt.figure(figsize=(10, 8), dpi=200)
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
plt.suptitle("均值滤波器",fontsize=40,x=0.5,y=0.1)
plt.subplot(121)
plt.imshow(img, cmap=plt.cm.gray)
plt.title("Qrigin",fontsize=18)
plt.subplot(122)
plt.imshow(gray_avg_img, cmap=plt.cm.gray)
plt.title("Result",fontsize=18)
plt.show()
if cv2.waitKey(0) == 27:
cv2.destroyAllWindows()
实现效果: