import cv2 as cv                  
import numpy as np                # 导入数值计算库,用于卷积核定义

img = cv.imread("plane.jpg")    

# 高斯模糊:加权平均滤波,中心权重高,越远权重越低,滤波结果更自然,通用预处理;(5,5)高斯核,必须奇数;sigmaX=1.2,sigma越大越模糊
gauss = cv.GaussianBlur(img, (5, 5), 1.2)  

# 均值滤波:3x3窗口内像素取平均,计算最快、最简单,模糊效果生硬、均匀,会模糊边缘,丢失细节
K = np.ones((3,3)) / 9  # 构造3x3均值卷积核,所有值=1/9;np.ones((3,3)) 核心是创建 3 行 3 列、全为 1 的矩阵, 除以 9 后得到的是均值滤波核,是 OpenCV 图像处理中降噪 / 模糊的经典用法;
img1 = cv.filter2D(img, -1, K)  # 手动卷积滤波,-1表示输出与原图通道深度一致
img2 = cv.blur(img, (3,3)) # OpenCV自带均值滤波,等效上面手动卷积
img3 = cv.boxFilter(img, -1, (3,3)) # 方框滤波,默认归一化后=均值滤波


# 中值模糊:用窗口内中位数替代中心像素,去椒盐噪声效果最好,保边缘能力>均值滤波,核必须奇数
median = cv.medianBlur(img, 5)    # 5x5窗口取中值,无卷积,纯排序替换;
result1 = cv.blur(img, (5,5))   # 5x5均值滤波(更大核=更模糊)
'''
双边滤波:高斯模糊+颜色相似度约束,保边缘+去噪,不会把边缘糊掉,计算速度最慢
空间距离近 → 加权;颜色相近 → 加权;颜色差异大 → 不模糊(保护边缘)
0表示自动计算核直径;50=颜色阈值,10=空间阈值
'''
result2 = cv.bilateralFilter(img, 0, 50, 10)  

cv.imshow("image", img)
cv.imshow("gauss", gauss)
cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("img3", img3)
cv.imshow("median", median)
cv.imshow("result1", result1)
cv.imshow("result2", result2) 

cv.waitKey(0)                    
cv.destroyAllWindows()           

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐