OpenCV常用滤波算法

高斯滤波

图像高斯滤波是一种常用的图像平滑算法,它的基本思想是在空间域中对图像进行加权平均,权值由高斯函数决定。高斯滤波的优点是在平滑图像的同时保留了图像的边缘信息。下面是图像高斯滤波的代码实现:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("example.jpg");

    // 高斯滤波
    Mat result;
    GaussianBlur(image, result, Size(5, 5), 0, 0);

    imshow("原图", image);
    imshow("高斯滤波", result);

    waitKey(0);

    return 0;
}

在代码中,使用`GaussianBlur`函数对图像进行高斯滤波操作,其中第二个参数`result`表示输出的图像,第三个参数`Size(5, 5)`表示滤波器的大小,第四个和第五个参数为0表示标准差自动计算。最后,将原图和高斯滤波后的图像显示出来。需要注意的是,滤波器大小的选择会影响滤波效果,通常情况下,滤波器大小越大,平滑效果越明显。

中值滤波

图像中值滤波是一种非线性滤波算法,它的基本思想是用像素点周围的邻域灰度值的中值来代替该像素点的灰度值,从而达到滤波的目的,可以去除椒盐噪声和斑点噪声等。下面是图像中值滤波的代码实现:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("example.jpg");

    // 中值滤波
    Mat result;
    medianBlur(image, result, 5);

    imshow("原图", image);
    imshow("中值滤波", result);

    waitKey(0);

    return 0;
}

在代码中,使用`medianBlur`函数对图像进行中值滤波操作,其中第二个参数`result`表示输出的图像,第三个参数5表示滤波器的大小,通常情况下,滤波器大小越大,滤波效果越明显。最后,将原图和中值滤波后的图像显示出来。需要注意的是,中值滤波对于处理斑点噪声和椒盐噪声等有比较好的效果,但是可能会对图像的细节信息造成一定的影响。

快速均值滤波

图像快速均值滤波是一种基于快速平均算法的图像滤波方法,它可以在保持较好平滑效果的同时大大提高图像处理的速度。它的基本思想是将图像分成若干个区域,然后用每个区域的均值来代替该区域内的所有像素点,从而达到滤波的效果。下面是使用`boxFilter`实现快速均值滤波的代码示例:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("example.jpg");

    // 快速均值滤波
    Mat result;
    int blockSize = 9;  // 区域大小
    boxFilter(image, result, -1, Size(blockSize, blockSize));

    imshow("原图", image);
    imshow("快速均值滤波", result);

    waitKey(0);

    return 0;
}

在代码中,使用`boxFilter`函数对图像进行快速均值滤波操作,其中第二个参数`result`表示输出的图像,第三个参数-1表示输出图像的深度与原图相同,第四个参数`Size(blockSize, blockSize)`表示滤波器的大小,即区域大小。最后,将原图和快速均值滤波后的图像显示出来。

双边滤波

图像双边滤波是一种保边去噪的滤波方法,它可以在保持图像边缘信息的同时去除噪声。它的基本思想是在滤波过程中,不仅考虑像素之间的空间距离,还考虑像素之间的灰度差异,从而达到保边的效果。下面是图像双边滤波的代码实现:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("example.jpg");

    // 双边滤波
    Mat result;
    bilateralFilter(image, result, 25, 50, 50);

    imshow("原图", image);
    imshow("双边滤波", result);

    waitKey(0);

    return 0;
}

在代码中,使用`bilateralFilter`函数对图像进行双边滤波操作,其中第二个参数`result`表示输出的图像,第三个参数25表示空间高斯函数的标准差,第四个参数50表示灰度值相似性高斯函数的标准差,第五个参数50表示空间高斯函数和灰度值相似性高斯函数的权重比例。最后,将原图和双边滤波后的图像显示出来。需要注意的是,双边滤波能够有效地去除高斯噪声、椒盐噪声和斑点噪声等,但是处理速度较慢。

联合双边滤波

图像联合双边滤波是一种基于双边滤波的图像增强方法,它能够在保持图像细节信息的同时去除噪声。它的基本思想是在滤波过程中,结合原始图像和平滑图像的信息,对图像进行增强。下面是图像联合双边滤波的代码实现:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("example.jpg");

    // 联合双边滤波
    Mat smoothImage, result;
    bilateralFilter(image, smoothImage, 25, 50, 50);
    addWeighted(image, 1.5, smoothImage, -0.5, 0, result);

    imshow("原图", image);
    imshow("联合双边滤波", result);

    waitKey(0);

    return 0;
}

在代码中,先使用`bilateralFilter`函数对图像进行双边滤波操作,得到平滑图像`smoothImage`。然后,使用`addWeighted`函数将原始图像和平滑图像结合起来,得到增强后的图像`result`。其中,第二个参数1.5表示原始图像权重的放大系数,第四个参数-0.5表示平滑图像权重的缩小系数。最后,将原图和联合双边滤波后的图像显示出来。需要注意的是,联合双边滤波能够有效地去除高斯噪声、椒盐噪声和斑点噪声等,同时保持图像细节信息。

结果展示

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值