高斯模糊:简单中的大智慧
理论讲完了,咱们来动手试试!用Python实现高斯模糊就像做一道简单的家常菜,只需要准备两个"食材":
OpenCV库:负责读取、显示和处理图像(相当于你的菜刀和菜板)
NumPy库:负责数值计算(相当于你的调料勺)
如果你还没有这些库,可以先在终端里输入这行命令安装:
pip install opencv-python numpy
然后复制下面这段代码,保存为gaussian_blur.py,运行后就能看到高斯模糊的效果啦!
// 导入需要的库
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取彩色图像
color_image = cv2.imread('images/color_image.jpg')
# 转换为RGB格式(因为OpenCV默认读取的是BGR格式)
rgb_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2RGB)
# 方法1:使用OpenCV内置函数实现高斯模糊
# 参数说明:(7,7)是高斯核的大小,1.5是标准差σ
blur_image_7 = cv2.GaussianBlur(rgb_image, (7, 7), 1.5)
# 尝试不同大小的高斯核
blur_image_15 = cv2.GaussianBlur(rgb_image, (15, 15), 2.0)
# 方法2:手动实现简单的高斯模糊(仅作演示,实际应用中推荐使用OpenCV内置函数)
def simple_gaussian_blur(image, kernel_size=3, sigma=1.0):
# 创建简单的高斯核(近似)
kernel = np.ones((kernel_size, kernel_size), np.float32) / (kernel_size * kernel_size)
# 应用卷积操作
blurred = cv2.filter2D(image, -1, kernel)
return blurred
# 手动实现的高斯模糊(效果不如OpenCV内置函数)
manual_blur = simple_gaussian_blur(rgb_image)
# 显示原图和不同方法得到的模糊图
plt.figure(figsize=(18, 5))
plt.subplot(141)
plt.imshow(rgb_image)
plt.title('彩色原图')
plt.axis('off')
plt.subplot(142)
plt.imshow(manual_blur)
plt.title('手动实现简单模糊')
plt.axis('off')
plt.subplot(143)
plt.imshow(blur_image_7)
plt.title('OpenCV高斯模糊 (7×7)')
plt.axis('off')
plt.subplot(144)
plt.imshow(blur_image_15)
plt.title('OpenCV高斯模糊 (15×15)')
plt.axis('off')
plt.tight_layout()
plt.show()
# 保存模糊后的图像
cv2.imwrite('images/blur_image.jpg', cv2.cvtColor(blur_image_7, cv2.COLOR_RGB2BGR))
print('模糊图像已保存!')
💡 小技巧:高斯核的大小和标准差σ是影响模糊效果的两个关键参数。核越大、σ越大,模糊效果越明显。就像磨皮时,强度调得越高,皮肤看起来越光滑,但也可能丢失一些细节。