bash
复制代码
# -*- coding:utf-8 -*-
import cv2 as cv
import sys
def my_blur(image):
return cv.blur(image, (3, 3)), cv.blur(image, (9, 9))
if __name__ == '__main__':
# 读取图像并判断是否读取成功
img = cv.imread('./images/Gray.jpg')
if img is None:
print('Failed to read Gray.jpg.')
sys.exit()
img_sp = cv.imread('./images/GraySalt.jpg')
if img_sp is None:
print('Failed to read GraySalt.jpg.')
sys.exit()
img_gauss = cv.imread('./images/GrayGauss.jpg')
if img_gauss is None:
print('Failed to read GrayGauss.jpg.')
sys.exit()
img1, img2 = my_blur(img)
img_sp1, img_sp2 = my_blur(img_sp)
img_gauss1, img_gauss2 = my_blur(img_gauss)
# 展示结果
cv.imshow('Origin Image', img)
cv.imshow('3 * 3 Blur Image', img1)
cv.imshow('5 * 5 Blur Image', img2)
cv.imshow('Origin sp-noisy Image', img_sp)
cv.imshow('3 * 3 sp-noisy Blur Image', img_sp1)
cv.imshow('5 * 5 sp-noisy Blur Image', img_sp2)
cv.imshow('Origin gauss-noisy Image', img_gauss)
cv.imshow('3 * 3 gauss-noisy Blur Image', img_gauss1)
cv.imshow('5 * 5 gauss-noisy Blur Image', img_gauss2)
cv.waitKey(0)
cv.destroyAllWindows()
```
cv2.blur 是 OpenCV 中实现均值滤波(归一化盒式滤波) 的核心函数,通过计算像素邻域内的平均值来平滑图像,适用于消除高斯噪声、降低图像细节复杂度等场景。
一、函数基本语法
python
运行
cv2.blur(src, ksize, dst=None, anchor=None, borderType=None)
参数说明
参数 ##含义 ## 必填 ##默认值
src ##输入图像(可以是单通道灰度图或多通道彩色图,如 BGR 格式) ##是 ###-
ksize ##滤波核(卷积核)的尺寸,格式为 (width, height)(如 (3,3)、(5,5)) ##是 ##-
dst ##输出图像(可选,若不指定则返回新图像) ##否 ##None
anchor ##核的锚点(滤波时的参考点),默认 (-1,-1) 表示锚点在核中心 ##否 ##(-1, -1)
borderType ##边界填充方式(处理图像边缘像素),##默认 cv2.BORDER_DEFAULT ##否 cv2.BORDER_DEFAULT
返回值
返回与输入图像尺寸、通道数相同的滤波后图像(ndarray 格式)。
二、核心原理
均值滤波的本质是:对图像中每个像素,用其邻域(核大小)内所有像素的平均值替换该像素值。公式:

核越大,平滑效果越强,但图像越模糊(细节丢失越多);
核尺寸通常取奇数(如 3×3、5×5),避免像素偏移。