- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
函数使用高斯滤波器对图像进行模糊处理。
该函数使用指定的高斯核对源图像进行卷积。支持原位过滤。
高斯模糊是一种有效的图像平滑技术,可以减少图像中的噪声和细节。
函数原型
void cv::GaussianBlur
(
InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT
)
参数
- 参数src 输入图像;图像可以有任意数量的通道,这些通道会独立处理,但是图像的深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F。
- 参数dst 输出图像,其大小和类型与 src 相同。
- 参数ksize 高斯核的大小。ksize.width 和 ksize.height 可以不同,但它们都必须是正数且为奇数。或者,它们都可以设为零,在这种情况下,它们会根据 sigmaX 和 sigmaY 自动计算。
- 参数sigmaX 高斯核在 X 方向的标准差。
- 参数sigmaY 高斯核在 Y 方向的标准差;如果 sigmaY 为零,则将其设置为等于 sigmaX;如果 sigmaX 和 sigmaY 都为零,则它们会根据 ksize.width 和 ksize.height 分别计算(参见 cv::getGaussianKernel 的详情);为了完全控制结果并避免将来可能的语义变化的影响,建议指定所有的 ksize、sigmaX 和 sigmaY。
- 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不受支持。
示例代码
#include <iostream>
#include <opencv2/opencv.hpp>
int main( int argc, char** argv )
{
// 读取图像
cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_COLOR );
if ( src.empty() )
{
std::cout << "Error: Image cannot be loaded!" << std::endl;
return -1;
}
cv::Size sz2Sh( 400, 600 );
cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
// 使用 GaussianBlur 进行平滑处理
cv::Mat dst;
cv::GaussianBlur( src, dst, cv::Size( 9, 9 ), 0, 0, cv::BORDER_DEFAULT );
// 显示图像
cv::namedWindow( "原始图像", cv::WINDOW_NORMAL );
cv::imshow( "原始图像", src );
cv::namedWindow( "高斯滤波后的图像", cv::WINDOW_NORMAL );
cv::imshow( "高斯滤波后的图像", dst );
cv::waitKey( 0 );
return 0;
}