通过使用Python中的用户定义的均值模糊过滤器对灰度图像执行模糊操作来平滑图像

图像模糊是指使图像不清晰或不清晰。均值滤波器通常用于去除图像或信号中的噪声。

在此程序中,我们将使用OpenCV-python(cv2)模块的两个功能。.让我们首先查看它们的语法和描述:

1) imread():
它将图像文件的绝对路径/相对路径作为参数,并返回其对应的图像矩阵。

如果标志值为:

  • 1:加载彩色图像。

  • 0:以灰度模式加载图像。

  • -1:加载图像,包括alpha通道。

如果未给出标志值,则显示原始图像,并给出哪个路径。

2) imshow():
以窗口名称和图像矩阵为参数,以便在具有指定窗口名称的显示窗口中显示图像。

同样在此程序中,我们将使用numpy模块的一个功能。

mean():获取数组并返回数组的平均值。

另外,在此程序中,我们使用数组切片的概念

设A为一维数组:
A [start:stop:step]

  1. start:序列的起始编号。

  2. 停止:生成不超过此数字的数字,但不包括此数字。

  3. 步骤:序列中每个数字之间的差。

示例

    A = [1,2,3,4,5,6,7,8,9,10]
    print(A[ 1: 5])

    Output:
    [2,3,4,5]

通过使用用户定义的均值来平滑灰度图像的Python程序

# 导入cv2模块
import cv2

# 导入numpy模块为np
import numpy as np

# 定义执行功能
# 图像上的均值模糊
def MeanBlur(img,size) :
    Ic = img

    # 从一半大小+ 1到最大
    # 图像中存在的行数
    for i in range(size//2 + 1,Ic.shape [0]):
        
        # 从一半大小+1到最大
        # 图像中存在的列数
        for j in range(size//2 + 1,Ic.shape [1]):

            # 以指定顺序形式的Ic图像矩阵为子矩阵 
            N = Ic[i-size//2 : i+ size//2 + 1, j - size//2: j+ size//2 + 1]

            # 找出子矩阵的均值
            mean = np.mean(N)

            # 将平均值赋予指定的像素坐标 
            img[i, j] = mean

    # 返回模糊图像
    return img


# 驱动程式码
if __name__ == "__main__" :

    # read an image using imread() function of cv2
    # 我们必须通过图像的路径
    # 和tha的值是可选的
    img = cv2.imread(r'C:\Users\user\Desktop\pic6.jpg',0)

    # 显示灰度图像
    cv2.imshow('original image',img)

    # 子矩阵的顺序
    order = 5

    # MeanBlur函数调用
    img = MeanBlur(img,order)

    # 显示平滑图像
    cv2.imshow("smooth image",img)

输出结果

在Python中平滑灰度图像-输出