opencv python 5 平滑滤波

opencv python 5 平滑滤波

2D卷积

opencv提供了cv2.filter2D()函数来对图像进行卷积操作(图像滤波)。

dst = cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
  • dst:输出图像
  • src:输入图像
  • ddepth:输出图像深度,-1为与原图相同
  • kernel:卷积核
  • anchor:锚点,默认为(-1, -1),指卷积核的中心点
  • delta:输出结果时的附加值,默认为0
  • borderType:边界模式,默认为BORDER_DEFAULT

如使用一个5x5的均值滤波器对图像作均值滤波:

import cv2
import numpy as np 

img = cv2.imread('a.jpg', 0)
kernel = np.ones((5, 5), np.float32) / 25
res = cv2.filter2D(img, -1, kernel)
cv2.imshow('res', res)
cv2.waitKey()

图像模糊

图像模糊即使用低通滤波器对图像作卷积,可以有效地消除噪声。

均值滤波

均值滤波即直接取核中每个像素的均值,由cv2.blur()实现。

dst = cv.blur(src, ksize[, dst[, anchor[, borderType]]])
  • dst:输出图像
  • src:输入图像
  • ksize:模糊核的大小
  • anchor:锚点,默认为(-1, -1),指卷积核的中心点
  • borderType:边界模式,默认为BORDER_DEFAULT
res = cv2.blur(img, (5, 5))

高斯滤波

cv2.GaussianBlur()根据像素距离使用高斯函数生成权重进行滤波。

dst = cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
  • dst:输出图像
  • src:输入图像
  • ksize:卷积核的大小
  • sigmaX:x方向上的标准差
  • sigmaY:y方向上的标准差
  • borderType:边界模式,默认为BORDER_DEFAULT

若只给了一个sigma则同时视为两轴的sigma,若均为0则根据尺寸自动生成。

res = cv2.GaussianBlur(img, (5, 5), 0)

中值滤波

cv2.medianBlur()取核中每个像素的中值作为该像素的值。

dst = cv.medianBlur(src, ksize[, dst])
  • dst:输出图像
  • src:输入图像
  • ksize:卷积核的大小
res = cv2.medianBlur(img, 5)

双边滤波

cv2.bilateralFilter()双边滤波在高斯滤波的基础上增加了灰度值的影响,可以有效地在保持边缘清晰的情况下去除噪声,但速度较慢。

dst = cv.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
  • dst:输出图像
  • src:输入图像
  • d:计算像素范围的直径
  • sigmaColor:色彩空间的sigma
  • sigmaSpace:协同空间的sigma
  • borderType:边界模式,默认为BORDER_DEFAULT
res = cv2.bilateralFilter(img, 9, 75, 75)

你可能感兴趣的:(opencv)