特效模糊操作

模糊(平滑)目的:从图像中去除高频内容,如边缘,并使其平滑。
在这里插入图片描述

一、均值模糊

均值模糊:图像与盒式过滤器进行卷积,图像的中心元素被核心区域中所有像素的平均值所取代。
    blur(src, dst, ksize, anchor, borderType)
        src - 表示此操作的源(输入图像)的Mat对象。
        dst - 表示此操作的目标(输出图像)的Mat对象。
        ksize - 表示内核大小的Size对象。
        anchor - 表示定位点的整数类型的变量。
        borderType - 整数类型的变量,表示要用于输出的边框的类型。
"""

def blur_demo(image):
    dst = cv.blur(image, (6, 6))
    cv.imshow('blur_demo', dst)

在这里插入图片描述

二、中值模糊

中值模糊:图像的中心元素被内核区域中所有像素的中值所代替。该操作在消除噪音的同时处理边缘
    medianBlur(src, dst, ksize)
    src - 表示此操作的源(输入图像)的Mat对象。
    dst - 表示此操作的目标(输出图像)的Mat对象。
    ksize - 表示内核大小的Size对象。 
"""

def median_blur_demo(image):
    dst = cv.medianBlur(image, 5) #5%2==1
    cv.imshow('median_blur_demo', dst)

在这里插入图片描述

三、自定义模糊

def custom_blur_demo(image):
    # 该卷积核为5行5列共计25个值,数据类型为float型,由于是全一矩阵,且除以总个数25,相当于求取原图像的平均值,其效果相当于均值滤波
    # kernel = np.ones([5, 5], np.float32) / 25
    kernel = np.array([[0, -1, 0], [-1.5, 6, -1.5], [0, -1, 0]], np.float32)  # 卷积核
    """
    filter2D(src, ddepth, kernel)
        src为需要处理的图片
        ddepth一般使用-1,表示与原图像具有相同的深度;
        kernel为卷积核,为单通道浮点矩阵
    """
    dst = cv.filter2D(image, -1, kernel=kernel)  # 锐化处理
    cv.imshow('custom_blur_demo', dst)

在这里插入图片描述

四、高斯模糊

# 返回的value介于A、B之间,若value小于min,返回min,若大于max,返回max
def clamp(pv):
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    else:
        return pv


# 获取高斯随机噪声图片
def gussian_noise(image):

    """
    :param image:
    :return:
    image.shape[0], 图片垂直尺寸
    image.shape[1], 图片水平尺寸
    image.shape[2], 图片通道数
    """

    h, w, c = image.shape
    for row in range(h):
        for col in range(w):

            """
            normal(loc=0.0, scale=1.0, size=None):
            loc:float(此概率分布的均值:对应着整个分布的中心centre)
            scale:float(此概率分布的标准差:对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
            size:int or tuple of ints(输出的shape,默认为None,只输出一个值)
            """

            s = np.random.normal(0, 20, 3)  # 产生随机数
            b = image[row, col, 0]  # blue
            g = image[row, col, 1]  # green
            r = image[row, col, 2]  # red
            image[row, col, 0] = clamp(b + s[0])
            image[row, col, 1] = clamp(g + s[1])
            image[row, col, 2] = clamp(r + s[2])
    cv.imshow('noise image', image)


# 高斯模糊
def gaussian_blur(image):
    """
        GaussianBlur(src, dst, ksize, sigmaX)
            src - 表示此操作的源(输入图像)的Mat对象。
            dst - 表示此操作的目标(输出图像)的Mat对象。
            ksize - 表示内核大小的Size对象。ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1
            sigmaX - 类型变量double表示X方向上的高斯核标准差。
    """
    gussian_noise(image)
    dst = cv.GaussianBlur(image, (5, 5), 18)
    cv.imshow('gaussian_blur', dst)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值