我正在关注图像处理教程,并说明以下内容
From the gray-scale image, a Gaussian image pyramid PGauss is
computed by firstly applying a 3× 3 Gaussian filter to the image
我知道如何使用PyrUp
和PyrDown
向下和向上采样图像。但我不知道如何使用或应用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)
吗?
答案 0 :(得分:2)
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()使用的是盒式过滤器,而不是高斯过滤器。