OpenCV-python学习笔记(四)——smoothing and blurring平滑和模糊

本文深入探讨了图像处理中的平滑与模糊技术,包括均值滤波、高斯滤波、中值滤波和双边滤波等方法,详细解释了每种方法的工作原理及应用场景,特别是对于图像阈值处理和边缘检测的预处理步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

smoothing and blurring平滑和模糊

什么是模糊呢,当我们拍照片没对上焦的时候,就是模糊。

实际上,这意味着图片中的每个像素点都和他旁边的像素点的值混在了一起,这种和相邻像素点进行混合的结果,就是模糊。

模糊通常是我们不希望的,但这在我们进行阈值处理,或者边缘检测的时候显得非常重要,通常第一步就是对图片进行平滑或者模糊。

1 averaging均值滤波

blurred = np.hstack([
    # 第二个值表示k*k的一个核,通常k要求为奇数
    # 这个k*k的滑动窗口就表示一个卷积核
    cv2.blur(image, (3,3)),
    cv2.blur(image, (5,5)),
    cv2.blur(image, (7,7))])
cv2.imshow("averaged", blurred)

在这里插入图片描述

2 gaussian高斯滤波

均值滤波使用的是一个平均值,而高斯滤波使用的是加权平均值,离中心元素越近的地方权重越大,离中心元素越远的地方权重越小。得到的结果比均值滤波更自然。

blurred = np.hstack([
    # 第二个值表示k*k的一个核,通常k要求为奇数
    # 第3个数值表示x-axis的偏差
    cv2.GaussianBlur(image, (3,3), 0),
    cv2.GaussianBlur(image, (5,5), 0),
    cv2.GaussianBlur(image, (7,7), 0)])
cv2.imshow("Gaussian", blurred)

在这里插入图片描述

3 median中值滤波

本质上是中位数滤波,中值滤波在去除椒盐(想象照片上撒满了胡椒粉和盐颗粒)噪声的时候非常有效,因为他总是用图像中已有的像素值来更新当前像素。

blurred = np.hstack([
    # 第二个值表示k*k的一个核,通常k要求为奇数
    cv2.mediaBlur(image, 3),
    cv2.mediaBlur(image, 5),
    cv2.mediaBlur(image, 7)])
cv2.imshow("median", blurred)

在这里插入图片描述

4 bilateral双边滤波

上面几个模糊方法有个问题,就是会丢失图像中的边缘。

为了解决这个问题,我们使用两个高斯分布,这就是双边滤波。

第一个高斯函数只考虑空间邻域,第二个高斯函数对邻域像素值进行建模,确保只有相似像素值的像素参与模糊计算,即那些与众不同的像素(他们其实是图像边缘和边界)被保留下来。

blurred = np.hstack([
    # 第2个值,5代表像素邻域空间的直径,
    # 第3个值,21表示颜色邻域,越大就会有更多的颜色参与计算
    # 第4个值,21代表空间邻域,越大,那么更远的像素就会参与计算
    cv2.bilateralFilter(image, 5, 21, 21),
    cv2.bilateralFilter(image, 7, 31, 31),
    cv2.bilateralFilter(image, 9, 41, 41)])
cv2.imshow("Bilateral", blurred)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值