OpenCV:11_均值滤波 Mean Filter

本文介绍了一个使用OpenCV库进行图像处理的示例,通过3x3的内核实现图像模糊效果。具体步骤包括读取图像、定义内核大小、应用平均滤波器并显示处理前后的图像对比。

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

#include <QCoreApplication>

#include <iostream>
#include <fstream>

#include <opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#define _USE_MATH_DEFINES
#include <math.h>

//#define M_PI 3.14159265358979323846

int main(int argc, char *argv[])
{
    cv::Mat srcImage = cv::imread("./test.jpg",cv::IMREAD_COLOR);

    int width = srcImage.rows;
    int height = srcImage.cols;

    cv::Mat dstImage = cv::Mat::zeros(height,width,CV_8UC3);

    //Prepare kernel
    int k_size = 3;
    int p = floor(k_size / 2);


    //filtering
    double v = 0;

    for (int j = 0; j < height;j++)
    {
        for (int i = 0 ; i < width ; i++)
        {
            for (int c = 0; c<3; c++)
            {
                v = 0;

                //将3*3的Kernel的各元素求和
                for (int _j = -p;_j < p+1;_j++)
                {
                    for (int _i = -p;_i < p+1;_i++)
                    {
                        if(((j+_j) >= 0) && ((i + _i) >= 0))
                        {
                            v += (double)srcImage.at<cv::Vec3b>(j+_j,i+_i)[c];
                        }
                    }
                }
                
                //求平均值
                v /= k_size * k_size;
                dstImage.at<cv::Vec3b>(j,i)[c] = v;
            }
        }
    }


    cv::imshow("SrcImage",srcImage);
    cv::imshow("DstImage",dstImage);
    std::cout << "END!" << std::endl;
    cv::waitKey(0);

    return 0;
}


 

### OpenCV C++ 中均值滤波的优点 均值滤波作为一种简单的线性滤波方法,在图像处理领域有着广泛的应用。其主要优点如下: - **计算简单高效**:均值滤波通过取邻域内像素值的平均来平滑图像,这种操作非常直观且易于实现[^2]。 - **有效减少噪声**:对于椒盐噪声和其他类型的随机噪声,均值滤波能够有效地降低这些干扰因素的影响,使图像更加清晰[^4]。 - **适用于多种场景**:无论是灰度图还是彩色图片,该技术都能提供良好的去噪效果;同时也能用于边缘检测前预处理阶段以增强后续特征提取的效果[^3]。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("path_to_image.jpg", IMREAD_GRAYSCALE); if(src.empty()){ printf("Could not open or find the image\n"); return -1; } // Apply mean filter with kernel size of 5x5 blur(src, src, Size(5, 5)); imshow("Mean Filtered Image", src); waitKey(0); return 0; } ``` ### OpenCV C++ 中均值滤波的缺点 尽管均值滤波具有上述优势,但它也存在一些局限性: - **细节丢失严重**:当采用较大窗口尺寸时,虽然可以更好地去除噪音,但也可能导致图像中的重要信息(如边界、纹理等)被过度模糊化而丧失掉原始特性。 - **对特定类型噪声敏感**:面对脉冲型或周期性的强噪声模式,单纯依靠均值运算可能无法达到理想的净化程度,反而会使某些异常点扩散开来影响更大范围内的正常数据。 - **难以恢复真实信号**:一旦经过多次迭代式的低通滤波过程之后,想要精确还原未经任何扰动的理想状态变得极其困难,因为部分高频成分已经被不可逆地削弱甚至消除掉了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值