图像的高斯平滑之c++实现(qt + 不调包)

1.基本原理

    高斯平滑也是利用邻域平均的思想对图像进行平滑,与普通平滑图像的不同点在于,不同位置的像素被赋予了不同的权值。一个3x3的高斯模板可见下图(此模板已被简易化了),用此模板进行图像平滑的时候,不仅能模糊图像的细节,也能更多的保留图像总体的灰度分布特征。

    真正的高斯模板是通过一下公式求出来的,其中\sigma为方差,它越大,曲面越平缓,当\sigma被给定的时候,我们可以根据坐标点(x, y)来计算该点的权值。

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解)

/*高斯平滑处理*/
QImage* MainWindow::SmoothGaussRGB(QImage* image)
{
    QImage* newImage = new QImage(image->width(),image->height(),QImage::Format_ARGB32);
    int kernel [3][3] = {
    {1,2,1},
    {2,4,2},
    {1,2,1}};
    int sizeKernel = 3;
    int sumKernel = 16;
    QColor color;
     for(int x = sizeKernel/2;x<image->width() - sizeKernel/2;x++)
    {
       for(int y= sizeKernel/2;y<image->height() - sizeKernel/2;y++)
        {
            int r = 0;
            int g = 0;
            int b = 0;
            for(int i = -sizeKernel/2;i<=sizeKernel/2;i++)
            {
               for(int j = -sizeKernel/2;j<=sizeKernel/2;j++)
                {
                 color = QColor(image->pixel(x+i,y+j));
                 r+=color.red()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 g+=color.green()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                 b+=color.blue()*kernel[sizeKernel/2+i][sizeKernel/2+j];
                }
            }
            r = qBound(0,r/sumKernel,255);
            g = qBound(0,g/sumKernel,255);
            b = qBound(0,b/sumKernel,255);
            newImage->setPixel(x,y,qRgb( r,g,b));
        }
    }
    return newImage;
}

3.下载路径

   整个系列链接: https://blog.csdn.net/m0_59023219/category_12425183.html

   内容介绍:

  [1]根据算法原理,编写纯c++源码,不调用外源库opencv 等;
  [2]包括各种图像处理的基本算法,包含腐蚀膨胀,缩放,转置,镜像,平移,均衡变化,灰度拉升,灰度阈值,灰度非线性,转灰度,灰度线性,旋转,简单平滑,高斯平滑,轮廓跟踪,种子算法,hough直线检测,拉普拉斯,带方向边缘检测,常规边缘检测(梯度算子、Roberts算子和Sobel算子),中值滤波,反色操作等;
  [3]程序中有完整的注释,便于大家很好理解代码。

   代码下载路径:基于QT的C++多种图像处理基本算法源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值