当前位置: 首页 > news >正文

完整教程:C++高斯滤波GaussianBlur函数用法(附带源码)

一、函数背景与原理介绍

1.1 什么是高斯滤波(Gaussian Blur)

高斯滤波(Gaussian Filtering) 是一种常用的图像平滑方法,用于去除噪声、减少图像细节、突出主要结构。


1.2 高斯滤波的作用

功能说明
去除高频噪声平滑图像,抑制噪声点
降低细节复杂度模糊细节,为边缘检测做预处理
提高鲁棒性在边缘检测(如 Canny)前常使用
特征提取前预处理保留低频信息,去除细小纹理

二、函数定义与语法结构

在 OpenCV(C++)中,高斯滤波函数定义如下:

void cv::GaussianBlur(
    InputArray src,       // 输入图像
    OutputArray dst,      // 输出图像
    Size ksize,           // 高斯核大小(奇数,如 Size(3,3)、Size(5,5))
    double sigmaX,        // X方向标准差
    double sigmaY = 0,    // Y方向标准差(默认与sigmaX相同)
    int borderType = BORDER_DEFAULT // 边界处理方式
);


三、主要参数详细解释

参数名类型说明
srcInputArray输入图像(8位或32位,单通道或三通道均可)
dstOutputArray输出图像,与输入大小相同
ksizecv::Size滤波核大小,必须为奇数(例如 3x3, 5x5)
sigmaXdoubleX方向高斯分布标准差(控制模糊程度)
sigmaYdoubleY方向标准差(若为0,则等于 sigmaX)
borderTypeint边界扩展模式,常用:BORDER_DEFAULTBORDER_REPLICATEBORDER_REFLECT

四、使用示例与效果展示

/******************************************************************************************** 文件名 : gaussian_blur_demo.cpp* 功能   : 演示 OpenCV 中 GaussianBlur 函数的使用方法* 编译   : g++ gaussian_blur_demo.cpp -o gaussian_blur_demo `pkg-config --cflags --libs opencv4`*******************************************************************************************/
#include 
#include 
using namespace cv;
using namespace std;
int main() {// 1. 读取原始图像Mat src = imread("test.jpg");if (src.empty()) {cerr << "图像加载失败!" << endl;return -1;}// 2. 创建输出图像Mat dst1, dst2, dst3;// 3. 不同参数下的高斯滤波GaussianBlur(src, dst1, Size(3, 3), 0, 0);GaussianBlur(src, dst2, Size(5, 5), 1.0);GaussianBlur(src, dst3, Size(9, 9), 2.5);// 4. 显示结果imshow("原图", src);imshow("高斯滤波 3x3", dst1);imshow("高斯滤波 5x5, σ=1.0", dst2);imshow("高斯滤波 9x9, σ=2.5", dst3);waitKey(0);return 0;
}

五、代码功能解读

代码段功能说明
GaussianBlur(src, dst1, Size(3, 3), 0, 0);使用默认标准差的3×3滤波核进行轻微模糊
GaussianBlur(src, dst2, Size(5, 5), 1.0);明确指定σ=1.0,适度平滑
GaussianBlur(src, dst3, Size(9, 9), 2.5);核大且σ大,图像更模糊
imshow()显示不同滤波结果

六、核大小(ksize)与σ(sigma)的关系

若你不指定 σ,OpenCV 会自动根据核大小推算:

σ=0.3×((ksize−1)2−1)+0.8\sigma = 0.3 \times \left( \frac{(ksize-1)}{2} - 1 \right) + 0.8σ=0.3×(2(ksize−1)​−1)+0.8

核大小自动σ近似值模糊程度
3×3≈ 0.8轻微
5×5≈ 1.2适中
9×9≈ 2.0强模糊

七、与其他平滑方法对比

方法OpenCV函数特点
均值滤波blur()简单平均,边缘不保留
中值滤波medianBlur()去除椒盐噪声,保留边缘
高斯滤波GaussianBlur()平滑自然,边缘损失较少
双边滤波bilateralFilter()保留边缘同时平滑噪声,计算量大

八、常见问题与解决方案

❓1. 为什么图像边缘会变暗或模糊不均?
✅ 原因:边界扩展方式不合适。
解决:可改为 BORDER_REFLECTBORDER_REPLICATE

GaussianBlur(src, dst, Size(5,5), 1.0, 1.0, BORDER_REFLECT);


❓2. 结果图像灰度变暗?
✅ 原因:原图为单通道,显示时未进行归一化。
解决:确保输入类型正确或归一化:

normalize(dst, dst, 0, 255, NORM_MINMAX);


❓3. 滤波结果过于模糊?
✅ 原因:σ 或 核太大。
解决:减小 sigmaXksize,如:

GaussianBlur(src, dst, Size(3,3), 0.5);

http://www.gsyq.cn/news/66221.html

相关文章:

  • 2025年权豆3号相关种业企业推荐,权豆3号产量提升、改良品
  • AI元人文构想:算法规制——悬荡悟空机制的深度解读
  • JavaEE初阶,网络编程篇 - 详解
  • C# 金字塔体积计算程序(Program for volume of Pyramid) - 教程
  • 2025年全国水轮泵设备企业综合评价:永州市冷水滩华立水力机
  • 从Hello World到“能做简单计算”,吃透基础语法
  • P8023 [ONTAK2015] Tasowanie 题解
  • 2025年GEO推广优化企业排名:专业GEO推广优化公司推荐
  • 基于MATLAB的二自由度机械臂PD控制
  • 2025年中国电动汽车充电桩生产厂排名:电动汽车充电桩生产厂
  • 2025年十大知名的媒体邀约品牌企业推荐,比较好的媒体邀约公
  • 2025文艺演出资深机构TOP5权威推荐:甄选专业团队助力活
  • 快懂百科创建代做公司有哪些,推荐一家能做快懂百科的公司
  • 升鲜宝供应链管理系统源代码---仓储式超市门店管理系统设计(一)
  • RAG_查询重构与分发 - 实践
  • java要记
  • 2025苯板雕刻加工厂TOP5权威推荐:苯板立体雕刻制造商哪
  • 【C編程】多個.c文件聯編
  • 2025年全国十大会议策划执行服务商排行榜,万贝上海文化传播
  • 【机器学习13】异常检测优化、推荐框架、协同过滤
  • 102302134陈蔡裔数据采集第四次作业
  • 2025年浙江寄宿制美术高中服务哪家好?性价比之选与口碑排名
  • 2025年十大杭州泡沫雕塑服务商厂家排行榜,精选泡沫雕塑厂家
  • 2025年十大泡沫雕塑厂家推荐,专业泡沫雕塑制造商全解析
  • 2025年知名的大连学习3D建模高性价比课程榜
  • 2025年质量好的电袋复合除尘器高评价厂家推荐榜
  • 2025年优秀的大连校企合作的公司实力机构名单
  • 【SpringBoot】31 核心功能 - 单元测试 - JUnit5 单元测试中的断言机制——验证你的代码是否按预期执行了 - 详解
  • 2025年质量好的四川水溶肥厂家最新权威推荐排行榜
  • 2025年优秀的日式搬家公司值得信赖榜