图像平滑之均值滤波(c++实现opencv blur()函数)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、概念
  • 二、opencv blur()函数
  • 三、原理c++实现
  • 四、自己实现的均值滤波和opencv的均值滤波对比


一、概念

均值滤波是最简单的滤波器,他将K*K窗口中像素值的平均值作为输出。这种滤波器等价于图像与全部元素值为1的核函数先进性卷积。

二、opencv blur()函数

函数原型:

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

src : 输入图像;它可以有任意数量的通道,这些通道是独立处理的,但深度应该是CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
dst :输出图像,与src相同大小和类型。
Ksize :均值滤波内核的大小。
anchor : 锚点;默认值Point(-1,-1)表示锚位于内核中心。
borderType : 图像的边界模式。

三、原理c++实现

//均值滤波
void myBlur(cv::Mat &src, cv::Mat &dst, cv::Size kSize)
{
    //图像边界扩充
    int hh = (kSize.height - 1) / 2;
    int hw = (kSize.width - 1) / 2;
    cv::Mat Newsrc;
    cv::copyMakeBorder(src, Newsrc, hh, hh, hw, hw, cv::BORDER_REFLECT_101);//以边缘为轴,对称
    dst = cv::Mat::zeros(src.rows, src.cols, src.type());

    //遍历图像
    for (int i = 0; i < src.rows; i++)
    {
        for (int j = 0; j < src.cols; j++)
        {
            double valueSum = 0.0;
            for (int k = 0; k < hh*2+1; k++)
            {
                for (int z = 0; z < hw*2+1; z++)
                {
                    double srcValue = (double)Newsrc.at<uchar>(i + k, j + z);
                    valueSum += srcValue;
                }
            }

            uchar meanValue = (uchar)(valueSum / ((hw*2+1)*(hh*2+1)));
            dst.at<uchar>(i, j) = meanValue;
        }
    }

}

四、自己实现的均值滤波和opencv的均值滤波对比

    cv::Mat src;
     src = cv::imread("D:\\QtProject\\Opencv_Example\\blur\\angio-part.png", cv::IMREAD_GRAYSCALE);
     if (src.empty()) {
         cout << "Cannot load image" << endl;
         return;
     }
     cv::imshow("src", src);
     
     cv::Mat blurDst;
     cv::blur(src, blurDst, cv::Size(12,12));
     cv::imshow("blurDst", blurDst);
     
    cv::Mat myBulrDst;
    myBlur(src, myBulrDst, cv::Size(12,12));
    cv::imshow("myBulrDst", myBulrDst);

图像平滑之均值滤波(c++实现opencv blur()函数)_第1张图片

你可能感兴趣的:(图像处理,opencv,c++,计算机视觉,均值算法,图像处理)