一个 2 维滤波器,如果可以分离为x 方向和 y 方向两个独立的 1 维滤波器。那么这个 2 维滤波器就称为 可分离滤波器。比如我们上面介绍的高斯滤波器就是一个典型的可分离滤波器。具有这种性质的滤波器有快速算法,可以比不具有这个性质的普通的滤波器更高效的计算。
这个函数的接口如下所示:
//! applies separable 2D linear filter to the image
CV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernelX, InputArray kernelY,
Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT );
与其他滤波器最大的区别就是需要传进 2 个滤波器核,kernelX 和 kernelY。下面举个例子:
cv::Mat kernel = cv::getGaussianKernel(
7
,
1.5
, CV_32F);
cv::sepFilter2D(image, result, -
1
, kernel, kernel);
相当于对 image 进行了一次高斯滤波,也就是说与下面的代码等效
cv::GaussianBlur(image, result, cv::Size(
7
,
7
),
1.5
);