滤波Smoothing Images——opencv_python

Smoothing Images
opencv_python中关于滤波方面,有两种方法。一是通过各种低通滤波器模糊图像;二是通过自定义滤波器。

filter2D()

例子

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('test.jpg')
kernel = np.ones((5,5),np.float32)/25
print("img:",img)
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
print(kernel)

Python:
dst = cv.filter2D( src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]] )

src,输入图像
dst,输出与输入图像相同size的图像
ddepth,目标图像所需深度
kernel, 卷积核(或者说是相关核),一个单通道浮点矩阵;如果您想将不同的内核应用于不同的通道,可以使用split将图像分割为不同的颜色平面,并分别处理它们。
anchor, 默认为(-1,-1),意味着anchor为核的中心
在这里插入图片描述

图像平滑技术

图像模糊是通过将图像与低通滤波核卷积实现的。所以边缘一般会模糊一点。当然也有不模糊的。在opencv中提供了四种图像平滑技术

均值滤波

cv.blurcv.boxFilter
cv.blur(),直接取核范围内的平均值作为中心值进行平滑
cv.boxFilter(),若设nomailze=False,求得的中心值将是核范围内所有值之和。
在这里插入图片描述

高斯滤波Gaussian Blurring

该算法采用高斯核函数代替盒形滤波器。它是用cv.GaussianBlur()函数完成的。我们应该指定内核的宽度和高度,它应该是正奇数。我们还应该分别指定X和Y方向的标准差,sigmaX和sigmaY。如果只指定sigmaX,则使用与sigmaX相同的sigmaY。如果两者都是0,则根据内核大小计算。高斯模糊是去除图像中高斯噪声的有效方法

cv.getGaussianKernel() #此函数可自定义高斯核
blur = cv.GaussianBlur(img,(5,5),0) #使用大小为5*5的高斯核

中值滤波

在这里,函数cv.medianBlur()取内核区域下所有像素的中值,将中心元素替换为这个中值。**这有效的防止椒盐噪声。**有趣的是,在上面的过滤器中,中心元素是一个新的计算值,它可能是图像中的一个像素值,也可能是一个新的值。但在中值模糊中,中心元素总是被图像中的某个像素值所替代。它有效地降低了噪音。它的内核大小应该是一个正奇数。

median = cv.medianBlur(img,5)

双边滤波(Bilateral Filter for Gray and Color Images)

双边滤波,引入了色彩权重和边界权重。做到了离中心点距离越近的点和颜色越相似的点对中心点的影响越大。从而尽量保证了颜色的边界。opencv的双边滤波函数参考地址

blur = cv.bilateralFilter(img,9,75,75)

猜你喜欢

转载自blog.csdn.net/weixin_43128028/article/details/85279101