高斯模糊、均值模糊、中值模糊、双边滤波—opencv实战5
【代码】高斯模糊、均值模糊、中值模糊、双边滤波——opencv实战5。
·
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()

更多推荐
所有评论(0)