• [python-opencv] 模糊操作


    @不要在奋斗的年纪 选择安逸

    均值模糊

    • 中值模糊
    • 自定义模糊
    • 意义与应用场景

    模糊的基本原理:

    1、基于离散卷积

    2、定义好每个卷积核

    3、不同卷积核得到不同的卷积效果

    4、模糊是卷积的一种表象

    #均值模糊 (2,8)高模糊2 宽模糊8
    def blur_demo(image):
        dst = cv.blur(image,(2,8))
        cv.imshow('blur_demo',dst)
    
    #中值模糊 适合椒盐噪声去噪
    def median_blur_demo(image):
        dst = cv.medianBlur(image,5)
        cv.imshow('median_blur_demo',dst)
    
    #自定义模糊
    def customer_blur_demo(image):
        #定义卷积核---均值模糊的效果
        # kernel = np.ones([5,5],np.float32/25)
        # 定义卷积核---锐化
        kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
    dst
    = cv.filter2D(image,-1,kernel=kernel) cv.imshow('customer_blur_demo',dst)

     高斯噪点

    高斯分布的概率密度函数

    numpy.random.normal(loc=0.0, scale=1.0, size=None)

    参数的意义为:

    loc:float

    概率分布的均值,对应着整个分布的中心center

    scale:float

    概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

    size:int or tuple of ints

    输出的shape,默认为None,只输出一个值,可以指定输出值个数返回列表

    我们更经常会用到np.random.randn(size)所谓标准正太分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)

    n = np.random.normal(0,8,4)
    print(n)
    ##[ -5.65830268   4.27277753   2.97616802  -15.1577604 ]

    #定义高斯噪声
    def gaussian_noise(image):
        h,w,ch = image.shape
        for row in range(h):
            for col in range(w):
                s = np.random.normal(0,20,3)   #均值为0 方差为20 输出3个值
                b = image[row,col,0]    #blue
                g = image[row,col,1]    #green
                r = image[row,col,2]    #red
                # 给blue层加上正态分布噪点
                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)

    """高斯模糊:这里(5, 5)表示高斯矩阵的长与宽都是5 标准差取6,当取尺寸(5,5)时标准差失效、当取尺寸(0,0)时标准差有效。并且高斯矩阵的尺寸越大或者标准差越大,处理过的图像模糊程度越大"""
    dst = cv.GaussianBlur(src,(5,5),6)
    cv.imshow('Gaussian Blur1',dst)
    dst = cv.GaussianBlur(src,(0,0),10)
    cv.imshow('Gaussian Blur2',dst)

    EPF(Edge Preserver Filter)边缘保留滤波

    高斯模糊只考虑了权重,只考虑了像素空间的分布,没有考虑像素值和另一个像素值之间差异的问题,如果像素间差异较大的情况下(比如图像的边缘),高斯模糊会进行处理,但是我们不需要处理边缘,要进行的操作就叫做边缘保留滤波(EPF)

    知识点:边缘轮廓差异较大的时候得到保留、

    案例:

    """
    #EPF-高斯双边滤波
    其中各参数所表达的意义:
        src:原图像;
        d:像素的邻域直径,可有sigmaColor和sigmaSpace计算可得;
        sigmaColor:颜色空间的标准方差,一般尽可能大;
        sigmaSpace:坐标空间的标准方差(像素单位),一般尽可能小。
    """
    def bi_demo(image):
        dst = cv.bilateralFilter(image,0,150,10)
        cv.imshow('bilateralFilter',dst)
    
    
    """
    #EPF-均值偏移滤波
    其中各参数所表达的意义:
        src:原图像;
        sp:空间窗的半径(The spatial window radius);
        sr:色彩窗的半径(The color window radius);
    注意: 通过均值迁移来进行边缘保留滤波有时会导致图像过度模糊
    """
    def shift_demo(image):
        dst = cv.pyrMeanShiftFiltering(image,10,50)
        cv.imshow('pyrMeanShiftFiltering',dst)
  • 相关阅读:
    微信公众号验证域名
    go在mac上打其他平台包
    screen窗口化管理守护进程
    kettle字符串null转空串
    MAC M1安装kettle spoon
    删除git文件版本控制
    LNMP状态管理命令
    事务处理
    精通 JS正则表达式
    php日期转时间戳,指定日期转换成时间戳
  • 原文地址:https://www.cnblogs.com/XJT2018/p/9916373.html
Copyright © 2020-2023  润新知