OpenCV学习心得——python版——图像模糊(图像平滑)之高斯模糊
FOR THE SIGMA
FOR THE GTINDER
FOR THE ROBOMASTER

简介:

本笔记仅供参考

操作系统版本:Windows10
编译器:JetBrains PyCharm 2019.1.3 x64
所需库
opencv-python2.xx.xx以上(我用的最新的,但是不一定要用最新的,3.4左右版本就行了)
numpy
pillow

电子版书籍下载地址
暂无资源

内容:

使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助。其实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一点。(当然,也有一些模糊技术不会模糊掉边界)。OpenCV 提供了四种模糊技术——平均、高斯模糊、中值模糊、双边滤波。

高斯模糊函数:

  • 现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求加权平均数,全就是方框里的值)。
  • 实现的函数是cv2.GaussianBlur()
  • 我们需要指定高斯核的宽和高(必须是奇数)以及高斯函数沿 X,Y 方向的标准差。
  • 如果我们只指定了 X 方向的的标准差,Y 方向也会取相同值。如果两个标准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。
    如果你愿意的话,你也可以使用函数 cv2.getGaussianKernel() 自己构建一个高斯核。

说明:

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

基础:

import cv2

img = cv2.imread('sss.jpg') #读取
img2 = cv2.GaussianBlur(img,ksize=(9,9,),sigmaX=0,sigmaY=0) #设定函数
cv2.imshow("img1",img) #显示原图
cv2.imshow("img2",img2) #显示高斯模糊后图像
cv2.waitKey(0)
cv2.destroyAllWindows()

python 视频局部模糊化处理 python图像去模糊_标准差


进阶:

import cv2 as cv #替换改用cv命名,也可以直接import cv2
import numpy

#防止颜色值超出颜色取值范围(0-255)
def clamp(pv):
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    return pv
#高斯噪声(高斯模糊)
def gaussian_noise(image):
    height, width, channel = image.shape
    for row in range(height):
        for col in range(width):
            for c in range(channel):
                s = numpy.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)


src = cv.imread("sss.jpg", cv.IMREAD_COLOR)
cv.namedWindow("image", cv.WINDOW_AUTOSIZE)
cv.imshow("image", src)

# 第二个参数:高斯核的宽和高(建议是奇数)
# 第三个参数:x和y轴的标准差
dst = cv.GaussianBlur(src, (5, 5), 0)
cv.imshow("GaussianBlur", dst)
cv.waitKey(0)
cv.destroyAllWindows()  #若前面为import cv2则把代码中的cv改为cv2

python 视频局部模糊化处理 python图像去模糊_OpenCV_02