Qt图像处理技术十:得到QImage图像的高斯模糊

效果图

参数为5

参数为20

原理

高斯模糊使用正态分布来分配周围像素的权重。具体来说,距离中心点越近的像素对最终结果的影响越大,权重也越高;随着距离的增加,权重逐渐减小。

这种权重分配方式确保了图像在模糊处理时,边缘信息得到相对较好的保留。

构建高斯核, 实现归一化,然后分别对水平方向模糊和垂直方向模糊

源码

cpp 复制代码
// 高斯模糊函数
QImage applyGaussianBlur(const QImage &oldimage, int radius)
{
    QImage image(oldimage);
    if (image.isNull() || radius <= 0)
        return QImage();

    QImage resultImage = image;
    const int size = radius * 2 + 1;
    const int sigma = radius / 2;
    const double sigmaSq = sigma * sigma;
    QVector<double> kernel(size);

    // 构建高斯核
    double sum = 0.0;
    for (int i = -radius; i <= radius; ++i)
    {
        double value = exp(-(i * i) / (2 * sigmaSq)) / (sqrt(2 * M_PI) * sigma);
        kernel[i + radius] = value;
        sum += value;
    }

    // 归一化
    for (int i = 0; i < size; ++i)
    {
        kernel[i] /= sum;
    }

    // 水平方向模糊
    for (int y = 0; y < image.height(); ++y)
    {
        for (int x = radius; x < image.width() - radius; ++x)
        {
            double red = 0, green = 0, blue = 0;
            for (int i = -radius; i <= radius; ++i)
            {
                QRgb pixel = image.pixel(x + i, y);
                red += qRed(pixel) * kernel[i + radius];
                green += qGreen(pixel) * kernel[i + radius];
                blue += qBlue(pixel) * kernel[i + radius];
            }
            resultImage.setPixel(x, y, qRgb(red, green, blue));
        }
    }

    // 垂直方向模糊
    for (int x = 0; x < image.width(); ++x)
    {
        for (int y = radius; y < image.height() - radius; ++y)
        {
            double red = 0, green = 0, blue = 0;
            for (int i = -radius; i <= radius; ++i)
            {
                QRgb pixel = resultImage.pixel(x, y + i);
                red += qRed(pixel) * kernel[i + radius];
                green += qGreen(pixel) * kernel[i + radius];
                blue += qBlue(pixel) * kernel[i + radius];
            }
            image.setPixel(x, y, qRgb(red, green, blue));
        }
    }
    return image;
}
相关推荐
飞翔的佩奇6 小时前
【完整源码+数据集+部署教程】表盘指针检测系统源码和数据集:改进yolo11-CA-HSFPN
python·yolo·计算机视觉·数据集·yolo11·表盘指针检测
lxmyzzs8 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
大橘8 小时前
【qml-4】qml与c++交互(类型多例)
qt·qml
Coovally AI模型快速验证9 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
飞翔的佩奇10 小时前
【完整源码+数据集+部署教程】二维码与查找模式检测系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·二维码与查找模式检测
qq_5260991312 小时前
图像采集卡与工业相机:机器视觉“双剑合璧”的效能解析
图像处理·数码相机·计算机视觉
CoovallyAIHub14 小时前
为高空安全上双保险!无人机AI护航,YOLOv5秒判安全带,守护施工生命线
深度学习·算法·计算机视觉
才思喷涌的小书虫15 小时前
小白玩转 DINO-X MCP(2):基于 DINO-X MCP 搭建饮食规划工作流
计算机视觉·mcp
Forward♞16 小时前
Qt——文件操作
开发语言·c++·qt
计算机sci论文精选16 小时前
CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
人工智能·深度学习·机器学习·计算机视觉·机器人·cvpr·具身智能