C# OpenCvSharp 图像处理函数-图像平滑滤波-blur、boxFilter、sqrBoxFilter、medianBlur、GaussianBlur

在这篇文章中,将详细介绍几个常用的图像处理函数,通过具体的示例来说明每个函数的作用和使用方法。这些函数包括 blur、boxFilter、sqrBoxFilter、medianBlur 和 GaussianBlur。每个示例都将展示函数的运算过程和结果,并与实际应用项目相关联。

1. blur 函数

定义:

void blur(InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1, -1), int borderType = BORDER_DEFAULT);

参数:

src:输入图像
dst:输出图像
ksize:滤波器的大小
anchor:滤波器的中心,通常采用默认值
borderType:边界类型,通常采用默认值

作用或原理:

图像模糊,也称为均值滤波。在 ksize 指定的大小内计算像素平均值,anchor 表示锚点位置,通常采用默认值,边界类型也采用默认值。

示例:

假设我们有一张包含小猫的图片,我们希望模糊处理这张图片,使得小猫的边缘不那么清晰。

using OpenCvSharp;

Mat src = Cv2.ImRead("cat.jpg"); // 读取图片
Mat dst = new Mat();
Cv2.Blur(src, dst, new Size(5, 5)); // 使用 5x5 的滤波器进行模糊处理
Cv2.ImWrite("blurred_cat.jpg", dst); // 保存模糊后的图片

运算过程和结果:

原始图像:清晰的小猫图片
模糊处理后:小猫的边缘变得模糊,不再那么清晰

2. boxFilter 函数

定义:

void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor = Point(-1, -1), bool normalize = true, int borderType = BORDER_DEFAULT);

参数:

src:输入图像
dst:输出图像
ddepth:输出图像的数据类型
ksize:滤波器的大小
anchor:滤波器的中心,通常采用默认值
normalize:是否归一化
borderType:边界类型,通常采用默认值

作用或原理:

盒子滤波,与均值滤波类似,参数 ddepth 可以设置输出图像的数据类型,参数 normalize 可以设置是否归一化。

示例:

假设我们有一张包含风景的图片,我们希望使用盒子滤波处理这张图片。

using OpenCvSharp;

Mat src = Cv2.ImRead("landscape.jpg"); // 读取图片
Mat dst = new Mat();
Cv2.BoxFilter(src, dst, -1, new Size(5, 5)); // 使用 5x5 的滤波器进行盒子滤波处理
Cv2.ImWrite("boxfiltered_landscape.jpg", dst); // 保存处理后的图片

运算过程和结果:

原始图像:清晰的风景图片
盒子滤波处理后:风景的细节变得模糊,整体效果类似于均值滤波

3. sqrBoxFilter 函数

定义:

void sqrBoxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor = Point(-1, -1), bool normalize = true, int borderType = BORDER_DEFAULT);

参数:

src:输入图像
dst:输出图像
ddepth:输出图像的数据类型
ksize:滤波器的大小
anchor:滤波器的中心,通常采用默认值
normalize:是否归一化
borderType:边界类型,通常采用默认值

作用或原理:

归一化平方和盒子滤波,与盒子滤波类似,计算滤波器内每个像素值的平方求和。

示例:

假设我们有一张包含建筑物的图片,我们希望使用平方和盒子滤波处理这张图片。

using OpenCvSharp;

Mat src = Cv2.ImRead("building.jpg"); // 读取图片
Mat dst = new Mat();
Cv2.SqrBoxFilter(src, dst, -1, new Size(5, 5)); // 使用 5x5 的滤波器进行平方和盒子滤波处理
Cv2.ImWrite("sqrboxfiltered_building.jpg", dst); // 保存处理后的图片

运算过程和结果:

原始图像:清晰的建筑物图片
平方和盒子滤波处理后:建筑物的细节变得模糊,但与普通盒子滤波相比,效果更平滑

4. medianBlur 函数

定义:

void medianBlur(InputArray src, OutputArray dst, int ksize);

参数:

src:输入图像
dst:输出图像
ksize:滤波器的大小

作用或原理:

中值滤波。中值滤波对脉冲(椒盐)噪声很有效。其原理是在设置的滤波器大小内,对像素值进行从小到大排序,然后取中间值代替原像素值。

示例:

假设我们有一张包含噪声的图片,我们希望使用中值滤波去除噪声。

using OpenCvSharp;

Mat src = Cv2.ImRead("noisy_image.jpg"); // 读取图片
Mat dst = new Mat();
Cv2.MedianBlur(src, dst, 5); // 使用 5x5 的滤波器进行中值滤波处理
Cv2.ImWrite("medianblurred_image.jpg", dst); // 保存处理后的图片

运算过程和结果:

原始图像:包含噪声的图片
中值滤波处理后:噪声被有效去除,图像变得更加清晰

5. GaussianBlur 函数

定义:

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT);

参数:

src:输入图像
dst:输出图像
ksize:滤波器的大小
sigmaX:X方向的高斯核标准偏差
sigmaY:Y方向的高斯核标准偏差
borderType:边界类型,通常采用默认值

作用或原理:

高斯滤波是一种加权均值滤波,距离中心像素距离越近,权值越大。高斯滤波对随机噪声有比较好的效果。

示例:

假设我们有一张包含自然景观的图片,我们希望使用高斯滤波处理这张图片。

using OpenCvSharp;

Mat src = Cv2.ImRead("nature.jpg"); // 读取图片
Mat dst = new Mat();
Cv2.GaussianBlur(src, dst, new Size(5, 5), 1.5); // 使用 5x5 的滤波器和 1.5 的标准偏差进行高斯滤波处理
Cv2.ImWrite("gaussianblurred_nature.jpg", dst); // 保存处理后的图片

运算过程和结果:

原始图像:清晰的自然景观图片
高斯滤波处理后:图像的细节变得柔和,噪声被有效去除
通过这些示例,我们可以看到不同的滤波器在图像处理中的应用和效果。希望这些内容能帮助你更好地理解和使用 OpenCvSharp 进行图像处理。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值