均值滤波算法

import numpy as np
import cv2


def mean_filter(image, kernel_size):
    # 获取图像的高度和宽度
    height, width = image.shape[:2]

    # 创建一个与原图像相同大小的空图像用于存储滤波结果
    filtered_image = np.zeros_like(image)

    # 计算滤波窗口的半径
    radius = kernel_size // 2

    # 遍历图像中的每个像素
    for i in range(height):
        for j in range(width):
            # 提取当前像素周围的窗口区域
            window = image[max(0, i - radius):min(height, i + radius + 1), max(0, j - radius):min(width, j + radius + 1)]

            # 对窗口内的像素值求均值,并将结果赋值给滤波后的像素
            filtered_image[i, j] = np.mean(window)

    return filtered_image

# 读取图像
image = cv2.imread(r'E:\photo\creator.jpg', 0)  # 以灰度模式读取图像

# 指定滤波窗口的大小(必须为奇数)
kernel_size = 5

# 应用均值滤波
filtered_image = mean_filter(image, kernel_size)

# 显示原图像和滤波后的图像
cv2.imshow("Original Image", image)
cv2.imshow("Filtered Image", filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/weixin_48158964/article/details/132430398