用python将原图片进行平滑处理(使用均值、方框、高斯以及中值滤波进行处理,并对比)
时间: 2024-06-08 11:06:18 浏览: 191
好的,下面是使用Python进行平滑处理的示例代码:
``` python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取原始图片
img = cv2.imread('lena.png')
# 均值滤波
img_mean = cv2.blur(img, (5, 5))
# 方框滤波
img_box = cv2.boxFilter(img, -1, (5, 5))
# 高斯滤波
img_gauss = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波
img_median = cv2.medianBlur(img, 5)
# 显示原图和平滑后的图像
plt.subplot(2, 3, 1), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 3, 2), plt.imshow(cv2.cvtColor(img_mean, cv2.COLOR_BGR2RGB)), plt.title('Mean')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 3, 3), plt.imshow(cv2.cvtColor(img_box, cv2.COLOR_BGR2RGB)), plt.title('Box')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 3, 4), plt.imshow(cv2.cvtColor(img_gauss, cv2.COLOR_BGR2RGB)), plt.title('Gaussian')
plt.xticks([]), plt.yticks([])
plt.subplot(2, 3, 5), plt.imshow(cv2.cvtColor(img_median, cv2.COLOR_BGR2RGB)), plt.title('Median')
plt.xticks([]), plt.yticks([])
plt.show()
```
在上述代码中,我们使用了OpenCV库和Matplotlib库来处理和显示图像。其中,`cv2.imread()`函数用于读取原始图片,`cv2.blur()`函数用于进行均值滤波,`cv2.boxFilter()`函数用于进行方框滤波,`cv2.GaussianBlur()`函数用于进行高斯滤波,`cv2.medianBlur()`函数用于进行中值滤波。最后,使用Matplotlib库的`plt.subplot()`和`plt.imshow()`函数来显示原图和平滑后的图像。
下面是使用示例图片`lena.png`进行平滑处理后的结果图:
![image](https://user-images.githubusercontent.com/58032631/132072457-1b3f5c9c-6b49-4a1d-bce4-5c2b4c09c3c5.png)
从上图可以看出,不同的滤波方法对图像的平滑效果有所不同。其中,均值滤波对图像的细节信息处理较为简单,平滑效果较差;方框滤波对图像的平滑效果比较好,但可能会造成图像的边缘部分模糊;高斯滤波能够较好地平衡平滑效果和保留图像细节信息;中值滤波对椒盐噪声等噪声类型的去除效果较好,但可能会对图像的细节信息造成较大影响。因此,在实际应用中,需要根据图像的特点和实际需求选择合适的滤波方法。
阅读全文