求opencv中高斯函数的具体解析,初学者,希望每条语句都解释下哈
发布网友
发布时间:2022-09-25 15:55
我来回答
共1个回答
热心网友
时间:2023-09-18 18:28
src和dst当然分别是输入图像和输出图像。Ksize为高斯滤波器模板大小,sigma1和sigma2分别为高斯滤波在横线和竖向的滤波系数。borderType为边缘扩展点插值类型
voidGaussianBlur( InputArray _src, OutputArray _dst, Size ksize,
double sigma1, double sigma2,
int borderType )
{
if( ksize.width == 1 && ksize.height == 1 )
{
src.copyTo(dst);//如果滤波器核的大小为1的话,则说明根本就不用滤波,输出矩阵与输入矩阵完全相同
return;
}
if( borderType != BORDER_CONSTANT )//当边缘扩展不是常数扩展时
{
if( src.rows == 1 )
ksize.height = 1;//如果输入矩阵是一个行向量,则滤波核的高强制为1
if( src.cols == 1 )
ksize.width = 1;//如果输入矩阵是一个列向量,则滤波核的宽强制为1
}
/*生成一个高斯滤波器引擎f*/
Ptr<FilterEngine> f = createGaussianFilter( src.type(), ksize, sigma1, sigma2, borderType );
f->apply( src, dst );//调用引擎函数,完成将输入矩阵src高斯滤波为输出矩阵dst
}
热心网友
时间:2023-09-18 18:28
src和dst当然分别是输入图像和输出图像。Ksize为高斯滤波器模板大小,sigma1和sigma2分别为高斯滤波在横线和竖向的滤波系数。borderType为边缘扩展点插值类型
voidGaussianBlur( InputArray _src, OutputArray _dst, Size ksize,
double sigma1, double sigma2,
int borderType )
{
if( ksize.width == 1 && ksize.height == 1 )
{
src.copyTo(dst);//如果滤波器核的大小为1的话,则说明根本就不用滤波,输出矩阵与输入矩阵完全相同
return;
}
if( borderType != BORDER_CONSTANT )//当边缘扩展不是常数扩展时
{
if( src.rows == 1 )
ksize.height = 1;//如果输入矩阵是一个行向量,则滤波核的高强制为1
if( src.cols == 1 )
ksize.width = 1;//如果输入矩阵是一个列向量,则滤波核的宽强制为1
}
/*生成一个高斯滤波器引擎f*/
Ptr<FilterEngine> f = createGaussianFilter( src.type(), ksize, sigma1, sigma2, borderType );
f->apply( src, dst );//调用引擎函数,完成将输入矩阵src高斯滤波为输出矩阵dst
}