如何正确使用3x3高斯滤波器

how to use 3x3 gaussian filter correctly

我正在学习图像处理教程,它说了以下内容

From the gray-scale image, a Gaussian image pyramid PGauss is
computed by firstly applying a 3× 3 Gaussian filter to the image

我知道如何使用 PyrUpPyrDown 对图像进行上下采样。但我不知道如何使用或应用 3x3 高斯滤波器!

我看了一些帖子并关注了他们,他们建议使用
ImgProc.getGaussianKernel(p1,p2,p3)

我在使用ImgProc.getGaussianKernel(p1,p2,p3)时遇到的问题是

1-我无法将类型指定为 CV_32 或 CV_64,因为当我将参数 3 指定为 ImgProc.CV_32 时,它总是用红线下划线?

2-我用了getGaussianKernel,只有size和sigma两个参数,当我运行这一步,把从它返回的Mat写入硬盘时,我发现图像是空的,尽管它有大小。为什么会这样?

请告诉我如何正确使用 3x3 高斯滤波器

更新:

我可以使用 ImgProc.blur(.....) 来平滑图像而不是 ImgProc.getGaussianKernel(p1,p2,p3) 吗?

你真的应该看看 docs before asking , also: filter2D ..

int kernelSize = 3; // 3x3 filter
int resultType = CvType.CV_32F; // CvType, not Imgproc !
double sigma = 1.2; // whatever you choose.

Mat kernel = Imgproc.getGaussianKernel(kernelSize, sigma, resultType);

// now apply the filter:
Mat filtered = new Mat();
Imgproc.filter2D(image, filtered, CvType.CV_32F, kernel);

GaussianBlur 与上面的代码相同,blur() 使用的是盒式过滤器,而不是高斯过滤器。