OpenCV图像滤波算法总结(Python)

参考博客:https://www.cnblogs.com/FHC1994/p/9097231.html
https://blog.csdn.net/wsp_1138886114/article/details/82872838#11__7
https://blog.csdn.net/wangleixian/article/details/78237597
https://www.zhihu.com/question/54918332/answer/142137732

一.图像的滤波处理

**过滤 :**是信号和图像处理中基本的任务。其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息。过滤可以移除图像中的噪音、提取感兴趣的可视特征、允许图像重采样等等。
**频域分析 :**将图像分成从低频到高频的不同部分。低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域。在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分。

  • 滤波(高通、低通、带通、带阻) 、模糊、去噪、平滑等。

1、均值模糊(低通滤波)、中值模糊(中值滤波)、用户自定义模糊

import cv2
import numpy as np


def blur_demo(image):
    """
    均值模糊 : 去随机噪声有很好的去噪效果
    (1, 15)是垂直方向模糊,(15, 1)是水平方向模糊
    """
    dst = cv2.blur(image, (1, 15))
    cv2.imshow("avg_blur_demo", dst)


def median_blur_demo(image):    # 中值模糊  对椒盐噪声有很好的去燥效果
    dst = cv2.medianBlur(image, 5)
    cv2.imshow("median_blur_demo", dst)


def custom_blur_demo(image):
    """
    用户自定义模糊
    下面除以25是防止数值溢出
    """
    kernel = np.ones([5, 5], np.float32)/25
    dst = cv2.filter2D(image, -1, kernel)
    cv2.imshow("custom_blur_demo", dst)


src = cv2.imread("C:\\Users\\Tony.Hsu\\Desktop\\cat.jpg")
img = cv2.resize(src, None, fx=0.8, fy=0.8, interpolation=cv2.INTER_CUBIC)
cv2.imshow('input_image', img)

blur_demo(img)
median_blur_demo(img)
custom_blur_demo(img)

cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述
注意:

  1. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
### 回答1: OpenCV中的双边滤波算法是一种图像处理技术,可以用Python编程实现。双边滤波算法可以在保留图像边缘信息的同时,对图像进行平滑处理。在Python中,可以使用cv2.bilateralFilter()函数来实现双边滤波算法。该函数的参数包括输入图像滤波器大小、颜色空间标准差和灰度空间标准差等。使用双边滤波算法可以有效地去除图像中的噪声,同时保留图像的细节信息,是图像处理中常用的技术之一。 ### 回答2: OpenCV是一个非常常用的计算机视觉库,在其众多的图像处理算法中,双边滤波是一种经典的局部平滑滤波算法,适用于去除噪声、保持边缘的清晰度。 在Python中,实现双边滤波算法的步骤如下: 1. 导入必要的库 ```python import cv2 import numpy as np ``` 2. 准备图像 双边滤波算法需要输入一幅图像,因此需要读取一张图像。这里以读取一张名为lena.png(灰度图)的图像为例。 ```python img = cv2.imread('lena.png', 0) ``` 3. 进行双边滤波 使用OpenCV中的双边滤波函数cv2.bilateralFilter()进行双边滤波处理,该函数有以下参数: - src: 输入图像 - d: 滤波器半径,单位为像素 - sigmaColor: 色彩空间的标准差 - sigmaSpace: 像素空间的标准差 - dst: 输出图像,可以直接使用输入图像 ```python blurred = cv2.bilateralFilter(img, 9, 75, 75) ``` 4. 显示图像 我们可以使用Matplotlib库来显示图像。 ```python import matplotlib.pyplot as plt plt.subplot(121), plt.imshow(img, cmap='gray') plt.title('Original Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(blurred, cmap='gray') plt.title('Blurred Image'), plt.xticks([]), plt.yticks([]) plt.show() ``` 双边滤波能够有效地去除噪声,并保留图像的边缘信息。但是,它的计算成本比较高,因此在对大型图像进行处理时需要考虑计算效率的问题。 ### 回答3: OpenCV是一个广泛使用的计算机视觉库,双边滤波算法是其中一个重要的功能。该算法主要用于对图像进行平滑处理,同时保留边缘信息,实现对图像的降噪和边缘保护。 这种算法基于高斯滤波,但与单纯的高斯滤波不同的是,它需要同时考虑图像上每个像素的空间距离和灰度值差异。这种“空间-灰度权重”的组合能够有效滤除高斯平滑无法消除的噪音,并避免对边缘信息的模糊。 在Python中使用OpenCV实现双边滤波算法非常便利。首先导入OpenCV库,然后可以使用“cv2.bilateralFilter()”函数来调用该算法,并指定相关参数,例如: filtered = cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace) 其中“img”是输入图像,“d”是卷积核直径,是一个正整数,“sigmaColor”和“sigmaSpace”是两个不同权重的参数,分别控制像素相似性权重和空间权重。 例如如果我们要对一个名为“img.jpg”的图片进行双边滤波,可以使用以下代码: import cv2 img = cv2.imread('img.jpg') filtered = cv2.bilateralFilter(img, 9, 75, 75) cv2.imshow('Filtered image', filtered) cv2.waitKey(0) cv2.destroyAllWindows() 在这个实例中,输入图像的卷积核直径为9,“sigmaColor”和“sigmaSpace”均为75,该函数返回一个滤镜过的图像。最后,该图像会被显示在屏幕上,并等待用户按下任意键退出。 总结来说,在处理图像的应用中,双边滤波算法是非常常用的。由于该算法可以消除噪音并保留边缘信息,因此它可以用于图像预处理、模式识别、图像分割等领域。在Python中使用OpenCV库来实现该算法也是很容易的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TonyHsuM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值