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

时间:2015-04-22 08:04:20

标签: java opencv gaussian edge-detection

我正在关注图像处理教程,并说明以下内容

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高斯滤波器!

我读了一些postes,我跟着他们,他们建议使用
     ImgProc.getGaussianKernel(p1,p2,p3)

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

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

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

请让我知道如何正确使用3x3高斯滤波器

更新

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

1 个答案:

答案 0 :(得分:2)

在询问之前你真的应该看一下docsfilter2D  ..

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()使用的是盒式过滤器,而不是高斯过滤器。