zoukankan      html  css  js  c++  java
  • OpenCV---高斯模糊(均值模糊的另一种)

    高斯分布:

    高斯模糊的原理

    一:图像产生高斯噪声循环代码实现(耗时)

    def clamp(pv):  #使我们的随机值在0-255之间
        if pv > 255:
            return 255
        if pv < 0:
            return 0
        return pv
    import cv2 as cv
    import numpy as np
    
    def gaussian_noise(image):  #对图像加上高斯噪声
        h,w,c = image.shape
        for row in range(h):  #十分耗时
            for col in range(w):
                s = np.random.normal(0,20,3)  #产生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)
    
    
    src = cv.imread("./1.png")  #读取图片
    cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #创建GUI窗口,形式为自适应
    cv.imshow("input image",src)    #通过名字将图像
    gaussian_noise(src)
    
    cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
    cv.destroyAllWindows()  #销毁所有窗口

    推文:从np.random.normal()到正态分布的拟合

     

    二:使用高斯模糊

    dst = cv.GaussianBlur(src,(0,0),15)  #我们可以通过修改高斯内核(快)和标准差来修改模糊程度
    cv.imshow("GaussianBlur",dst)
    参数详解如下:
        src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
        dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
        ksize,高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数(并不能理解)。或者,它们可以是零的,它们都是由sigma计算而来。
        sigmaX,表示高斯核函数在X方向的的标准偏差。  根据这个可以获取sigmaY,若是sigmaX和sigmaY都没有则根据ksize获取
        sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
        为了结果的正确性着想,最好是把第三个参数Size,第四个参数sigmaX和第五个参数sigmaY全部指定到。
        borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。

    三:使用高斯模糊处理高斯噪声(发现高斯噪声的影响不大,高斯模糊对其有抑制作用)

    gaussian_noise(src) #修改原图为高斯噪声图
    dst = cv.GaussianBlur(src,(5,5),15)
    cv.imshow("GaussianBlur",dst)

  • 相关阅读:
    新买的电脑桌面只有回收站该做些什么
    不安装oracle客户端也可以使用pl/sql developer
    Win7上安装Oracle数据库
    忘记oracle的sys用户密码怎么修改
    UML中类之间的关系
    JAVAEE 是什么,如何获取各种规范jar包及各种规范的jar包源码
    PL/SQL Developer使用技巧、快捷键
    Windows 7上安装Microsoft Loopback Adapter(微软环回网卡)
    超棒的30款JS类库和工具
    HTTP协议
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9268492.html
Copyright © 2011-2022 走看看