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

图像模糊是指使图像不清晰或不清晰。中值滤波器通常用于去除图像或信号中的噪声。中值滤波在数字图像处理中非常广泛地使用,因为在某些条件下,中值滤波可以在消除噪声的同时保留边缘。

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

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

如果标志值为:

  • 1:加载彩色图像。

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

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

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

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

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

median():获取数组并返回数组的中位数。

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

设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程序可平滑灰度图像

# import cv2 module
import cv2

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

#定义一个函数来执行
#图像的中值模糊
def MedianBlur(img,size) :
    Ic = img

    for i in range(size//2 + 1,Ic.shape [0]):
        
        for j in range(size//2 + 1,Ic.shape [1]):

            N = Ic[i-size//2 : i+ size//2 + 1, j - size//2: j+ size//2 + 1]

            #求子矩阵的中值
            med = np.median(N)

            #将该中值赋给指定的像素坐标
            img[i, j] = med

    # return blur image
    return img


# Driver code
if __name__ == "__main__" :

    #使用cv2的imread()函数读取图像
    #我们必须通过图像的路径
    #以及标志的值,该值是可选的
    img = cv2.imread(r'C:\Users\user\Desktop\pic6.jpg',0)

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

    #子矩阵的阶
    order = 5

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

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

输出结果

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