详解Python+OpenCV对图像进行平滑(模糊)操作

文章目录

  • 图像平滑
    • 均值滤波
    • 高斯滤波
    • 中值滤波
  • 总结

图像平滑

  • 图像平滑从信号处理的角度看就是去除其中的高频信息,保留低频信息。因此我们可以对图像实施低通滤波。低通滤波可以去除图像中的噪声,对图像进行平滑。
  • 根据滤波器的不同可分为均值滤波,高斯滤波,中值滤波, 双边滤波。

均值滤波

采用均值滤波模板对图像噪声进行滤除。

  • 优点是算法简单,计算速度较快,

  • 缺点是在去噪的同时去除了很多细节部分,将图像变得模糊。

  • API:

    cv.blur(src, ksize, anchor, borderType)
    
  • 参数:

    src:输入图像
    ksize:卷积核的大小
    anchor:默认值 (-1,-1) ,表示核中心
    borderType:边界类型

实验案例


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('dog.png')
# 2 均值滤波
blur = cv.blur(img,(5,5))
# 3 图像显示
plt.rcParams['font.family'] = 'SimHei' #使用黑体
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('均值滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

详解Python+OpenCV对图像进行平滑(模糊)操作_第1张图片

高斯滤波

  • 高斯滤波去噪就是对整幅图像像素值进行加权平均,针对每一个像素点的值,都由其本身值和邻域内的其他像素值经过加权平均后得到。

API:

cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)
  • 参数:
    • src: 输入图像
    • ksize:高斯卷积核的大小,注意 : 卷积核的宽度和高度都应为奇数,且可以不同
    • sigmaX: 水平方向的标准差
    • sigmaY: 垂直方向的标准差,默认值为0,表示与sigmaX相同
    • borderType:填充边界类型

实验案例

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('dog2.png')
# 2 高斯滤波
blur = cv.GaussianBlur(img,(3,3),1)
# 3 图像显示
plt.rcParams['font.family'] = 'SimHei' #使用黑体
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('高斯滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

详解Python+OpenCV对图像进行平滑(模糊)操作_第2张图片

中值滤波

  • 中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值。

  • 中值滤波对椒盐噪声(salt-and-pepper noise)来说尤其有用,因为它不依赖于邻域内那些与典型值差别很大的值。

  • API:

    cv.medianBlur(src, ksize )
    
  • 参数:

    src:输入图像
    ksize:卷积核的大小

实验案例

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('dog3.png')
# 2 中值滤波
blur = cv.medianBlur(img,5)
# 3 图像显示
plt.rcParams['font.family'] = 'SimHei' #使用黑体
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('中值滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

详解Python+OpenCV对图像进行平滑(模糊)操作_第3张图片

总结

图像平滑

  • 均值滤波:算法简单,计算速度快,在去噪的同时去除了很多细节部分,将图像变得模糊
    cv.blur()
  • 高斯滤波: 去除高斯噪声
    cv.GaussianBlur()
  • 中值滤波: 去除椒盐噪声
    cv.medianBlur()

你可能感兴趣的:(人生苦短-我用Python,python)