OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
Graph API: 图像滤波器

详细说明

函数

GMat cv::gapi::bilateralFilter (const GMat &src, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
 对图像应用双边滤波。
 
GMat cv::gapi::blur (const GMat &src, const Size &ksize, const Point &anchor=Point(-1,-1), int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 使用归一化框式滤波(normalized box filter)模糊图像。
 
GMat cv::gapi::boxFilter (const GMat &src, int dtype, const Size &ksize, const Point &anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 使用框式滤波模糊图像。
 
GMat cv::gapi::dilate (const GMat &src, const Mat &kernel, const Point &anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 使用特定的结构元素膨胀图像。
 
GMat cv::gapi::dilate3x3 (const GMat &src, int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 使用 3x3 矩形结构元素对图像进行膨胀。
 
GMat cv::gapi::erode (const GMat &src, const Mat &kernel, const Point &anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 使用特定的结构元素腐蚀图像。
 
GMat cv::gapi::erode3x3 (const GMat &src, int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 使用 3x3 矩形结构元素对图像进行腐蚀。
 
GMat cv::gapi::filter2D (const GMat &src, int ddepth, const Mat &kernel, const Point &anchor=Point(-1,-1), const Scalar &delta=Scalar(0), int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 将图像与卷积核进行卷积。
 
GMat cv::gapi::gaussianBlur (const GMat &src, const Size &ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 使用高斯滤波器模糊图像。
 
GMat cv::gapi::Laplacian (const GMat &src, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)
 计算图像的拉普拉斯算子。
 
GMat cv::gapi::medianBlur (const GMat &src, int ksize)
 使用中值滤波器模糊图像。
 
GMat cv::gapi::morphologyEx (const GMat &src, const MorphTypes op, const Mat &kernel, const Point &anchor=Point(-1,-1), const int iterations=1, const BorderTypes borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 执行高级形态学变换。
 
GMat cv::gapi::sepFilter (const GMat &src, int ddepth, const Mat &kernelX, const Mat &kernelY, const Point &anchor, const Scalar &delta, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 对矩阵(图像)应用可分离的线性滤波器。
 
GMat cv::gapi::Sobel (const GMat &src, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 使用扩展 Sobel 算子计算图像的一阶、二阶、三阶或混合导数。
 
std::tuple< GMat, GMatcv::gapi::SobelXY (const GMat &src, int ddepth, int order, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 使用扩展 Sobel 算子计算图像的一阶、二阶、三阶或混合导数。
 

函数文档 (Function Documentation)

◆ bilateralFilter()

GMat cv::gapi::bilateralFilter ( const GMat & src,
int d,
double sigmaColor,
double sigmaSpace,
int borderType = BORDER_DEFAULT )
Python
cv.gapi.bilateralFilter(src, d, sigmaColor, sigmaSpace[, borderType]) -> retval

#include <opencv2/gapi/imgproc.hpp>

对图像应用双边滤波。

此函数对输入图像应用双边滤波,如 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html 所述。双边滤波能够很好地减少不必要的噪声,同时保持边缘相对锐利。然而,与大多数滤波器相比,它的速度非常慢。

Sigma 值:为简单起见,您可以将两个 sigma 值设置为相同。如果它们很小(< 10),滤波器效果不明显;而如果它们很大(> 150),则会产生非常强的效果,使图像看起来“卡通化”。

滤波器大小:大型滤波器(d > 5)非常慢,因此建议在实时应用中使用 d=5,对于需要大量降噪的离线应用,可以使用 d=9。

此滤波器不原地操作。

注意
函数文本 ID 为 "org.opencv.imgproc.filters.bilateralfilter"
参数
src源 8 位或浮点型,1 通道或 3 通道图像。
d滤波期间使用的每个像素邻域的直径。如果为非正数,则从 sigmaSpace 计算。
sigmaColor颜色空间的滤波器 sigma。该参数值越大,意味着像素邻域内(参见 sigmaSpace)更远的颜色将混合在一起,从而形成更大的半等色区域。
sigmaSpace坐标空间的滤波器 sigma。该参数值越大,意味着只要像素颜色足够接近(参见 sigmaColor),更远的像素也会相互影响。当 d>0 时,它指定邻域大小,而与 sigmaSpace 无关。否则,d 与 sigmaSpace 成比例。
borderType用于外推图像外部像素的边界模式,请参见 BorderTypes
返回
与源图像大小和类型相同的目标图像。

◆ blur()

GMat cv::gapi::blur ( const GMat & src,
const Size & ksize,
const Point & anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.blur(src, ksize[, anchor[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用归一化框式滤波(normalized box filter)模糊图像。

此函数使用以下核函数平滑图像

\[\texttt{K} = \frac{1}{\texttt{ksize.width*ksize.height}} \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 & 1 \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \hdotsfor{6} \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \end{bmatrix}\]

调用 blur(src, ksize, anchor, borderType) 等价于 boxFilter(src, src.type(), ksize, anchor, true, borderType)

支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.blur"
参数
src源图像。
ksize模糊内核大小。
锚点 (anchor)锚点;默认值 Point(-1,-1) 表示锚点位于核中心。
borderType用于外推图像外部像素的边界模式,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
boxFilter, bilateralFilter, GaussianBlur, medianBlur

◆ boxFilter()

GMat cv::gapi::boxFilter ( const GMat & src,
int dtype,
const Size & ksize,
const Point & anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.boxFilter(src, dtype, ksize[, anchor[, normalize[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用框式滤波模糊图像。

此函数使用以下核函数平滑图像

\[\texttt{K} = \alpha \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 & 1 \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \hdotsfor{6} \\ 1 & 1 & 1 & \cdots & 1 & 1 \end{bmatrix}\]

其中

\[\alpha = \begin{cases} \frac{1}{\texttt{ksize.width*ksize.height}} & \texttt{when } \texttt{normalize=true} \\1 & \texttt{otherwise} \end{cases}\]

未归一化的盒子滤波器对于计算每个像素邻域的各种积分特性很有用,例如图像导数的协方差矩阵(用于稠密光流算法等)。如果您需要计算可变大小窗口的像素和,请使用 cv::integral

支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.boxfilter"
参数
src源图像。
dtype输出图像深度(-1 表示设置为输入图像数据类型)。
ksize模糊内核大小。
锚点 (anchor)核内的锚点位置。默认值 \((-1,-1)\) 表示锚点位于核中心。
normalize标志,指定内核是否按其面积归一化。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
sepFilter, gaussianBlur, medianBlur, integral

◆ dilate()

GMat cv::gapi::dilate ( const GMat & src,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python
cv.gapi.dilate(src, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用特定的结构元素膨胀图像。

此函数使用指定的结构元素对源图像进行膨胀,该结构元素确定了取最大值的像素邻域的形状

\[\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

膨胀可以应用多次(迭代)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, 和 CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.dilate"
参数
src输入图像。
kernel用于膨胀的结构元素;如果 elemenat=Mat(),则使用 3x3 矩形结构元素。核可以使用 getStructuringElement 创建。
锚点 (anchor)锚点在元素中的位置;默认值 (-1, -1) 表示锚点位于元素中心。
iterations应用膨胀的次数。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常量边界情况下的边界值
另请参阅
erode, morphologyEx, getStructuringElement

◆ dilate3x3()

GMat cv::gapi::dilate3x3 ( const GMat & src,
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python
cv.gapi.dilate3x3(src[, iterations[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用 3x3 矩形结构元素对图像进行膨胀。

此函数使用指定的结构元素对源图像进行膨胀,该结构元素确定了取最大值的像素邻域的形状

\[\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

膨胀可以应用多次(迭代)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, 和 CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.dilate"
参数
src输入图像。
iterations应用膨胀的次数。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常量边界情况下的边界值
另请参阅
dilate, erode3x3

◆ erode()

GMat cv::gapi::erode ( const GMat & src,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python
cv.gapi.erode(src, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用特定的结构元素腐蚀图像。

此函数使用指定的结构元素对源图像进行腐蚀,该结构元素确定了取最小值的像素邻域的形状

\[\texttt{dst} (x,y) = \min _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

腐蚀可以应用多次(迭代)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, 和 CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.erode"
参数
src输入图像
kernel用于腐蚀的结构元素;如果 element=Mat(),则使用 3 x 3 矩形结构元素。核可以使用 getStructuringElement 创建。
锚点 (anchor)锚点在元素中的位置;默认值 (-1, -1) 表示锚点位于元素中心。
iterations应用腐蚀的次数。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常量边界情况下的边界值
另请参阅
dilate, morphologyEx

◆ erode3x3()

GMat cv::gapi::erode3x3 ( const GMat & src,
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python
cv.gapi.erode3x3(src[, iterations[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用 3x3 矩形结构元素对图像进行腐蚀。

此函数使用矩形结构元素腐蚀源图像,矩形中心作为锚点。腐蚀可以应用多次(迭代)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, 和 CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.erode"
参数
src输入图像
iterations应用腐蚀的次数。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常量边界情况下的边界值
另请参阅
erode, dilate3x3

◆ filter2D()

GMat cv::gapi::filter2D ( const GMat & src,
int ddepth,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
const Scalar & delta = Scalar(0),
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.filter2D(src, ddepth, kernel[, anchor[, delta[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

将图像与卷积核进行卷积。

此函数对图像应用任意线性滤波器。当核部分位于图像外部时,函数会根据指定的边界模式插值离群像素值。

此函数实际上计算的是相关性,而不是卷积

\[\texttt{dst} (x,y) = \sum _{ \substack{0\leq x' < \texttt{kernel.cols}\\{0\leq y' < \texttt{kernel.rows}}}} \texttt{kernel} (x',y')* \texttt{src} (x+x'- \texttt{anchor.x} ,y+y'- \texttt{anchor.y} )\]

也就是说,核不会围绕锚点镜像。如果您需要真正的卷积,请使用 flip 翻转核,并将新锚点设置为 (kernel.cols - anchor.x - 1, kernel.rows - anchor.y - 1)

支持的矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.filter2D"
参数
src输入图像。
ddepth目标图像所需的深度
kernel卷积核(更确切地说是相关核),单通道浮点矩阵;如果您想对不同通道应用不同的内核,请使用 split 将图像拆分为独立的颜色平面并分别处理。
锚点 (anchor)核的锚点,表示滤波点在核内的相对位置;锚点应位于核内;默认值 (-1,-1) 表示锚点位于核中心。
delta可选值,在存储到 dst 之前添加到滤波后的像素中。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
sepFilter

◆ gaussianBlur()

GMat cv::gapi::gaussianBlur ( const GMat & src,
const Size & ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.gaussianBlur(src, ksize, sigmaX[, sigmaY[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用高斯滤波器模糊图像。

此函数使用指定的高斯核对源图像进行 filter2D 运算。输出图像必须与输入图像具有相同的类型和通道数。

支持的输入矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.gaussianBlur"
参数
src输入图像;
ksize高斯核大小。ksize.width 和 ksize.height 可以不同,但它们都必须是正奇数。或者,它们可以为零,然后从 sigma 计算它们。
sigmaXX 方向的高斯内核标准差。
sigmaYY 方向高斯核标准差;如果 sigmaY 为零,则将其设置为等于 sigmaX;如果两个 sigma 都为零,则分别从 ksize.width 和 ksize.height 计算它们(有关详细信息,请参见 cv::getGaussianKernel);为了完全控制结果,无论未来对所有这些语义可能进行的修改,建议指定所有 ksize、sigmaX 和 sigmaY。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
sepFilter, boxFilter, medianBlur

◆ Laplacian()

GMat cv::gapi::Laplacian ( const GMat & src,
int ddepth,
int ksize = 1,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT )
Python
cv.gapi.Laplacian(src, ddepth[, ksize[, scale[, delta[, borderType]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

计算图像的拉普拉斯算子。

此函数通过将使用 Sobel 运算符计算的二阶 x 和 y 导数相加来计算源图像的拉普拉斯算子

\[\texttt{dst} = \Delta \texttt{src} = \frac{\partial^2 \texttt{src}}{\partial x^2} + \frac{\partial^2 \texttt{src}}{\partial y^2}\]

这在 ksize > 1 时完成。当 ksize == 1 时,拉普拉斯算子通过使用以下 \(3 \times 3\) 核对图像进行滤波来计算

\[\vecthreethree {0}{1}{0}{1}{-4}{1}{0}{1}{0}\]

注意
函数文本 ID 为 "org.opencv.imgproc.filters.laplacian"
参数
src源图像。
ddepth目标图像所需的深度。
ksize用于计算二阶导数滤波器的孔径大小。请参见 getDerivKernels 了解详情。大小必须为正奇数。
scale计算的拉普拉斯值可选的比例因子。默认情况下不应用缩放。请参见 getDerivKernels 了解详情。
delta可选的 delta 值,在将结果存储到 dst 之前添加到结果中。
borderType像素外推方法,请参见 BorderTypesBORDER_WRAP 不支持。
返回
与 src 相同大小和相同通道数的目标图像。
另请参阅
Sobel, Scharr

◆ medianBlur()

GMat cv::gapi::medianBlur ( const GMat & src,
int ksize )
Python
cv.gapi.medianBlur(src, ksize) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用中值滤波器模糊图像。

此函数使用具有 \(\texttt{ksize} \times \texttt{ksize}\) 孔径的中值滤波器平滑图像。多通道图像的每个通道独立处理。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。中值滤波器内部使用 cv::BORDER_REPLICATE 来处理边界像素,请参见 cv::BorderTypes
  • 函数文本 ID 为 "org.opencv.imgproc.filters.medianBlur"
参数
src输入矩阵(图像)
ksize光圈线性大小;它必须是奇数且大于 1,例如:3、5、7 ...
另请参阅
boxFilter, gaussianBlur

◆ morphologyEx()

GMat cv::gapi::morphologyEx ( const GMat & src,
const MorphTypes op,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
const int iterations = 1,
const BorderTypes borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python
cv.gapi.morphologyEx(src, op, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

执行高级形态学变换。

此函数可以使用腐蚀和膨胀作为基本操作来执行高级形态学变换。

任何操作都可以原地完成。对于多通道图像,每个通道独立处理。

注意
  • 函数文本 ID 为 "org.opencv.imgproc.filters.morphologyEx"
  • 迭代次数是腐蚀或膨胀操作将应用的次数。例如,具有两次迭代的开运算(MORPH_OPEN)等效于依次应用:腐蚀 -> 腐蚀 -> 膨胀 -> 膨胀(而不是腐蚀 -> 膨胀 -> 腐蚀 -> 膨胀)。
参数
src输入图像。
op形态学操作类型,请参见 MorphTypes
kernel结构元素。可以使用 getStructuringElement 创建。
锚点 (anchor)元素内的锚点位置。两个负值都表示锚点位于核中心。
iterations腐蚀和膨胀应用的次数。
borderType像素外推方法,请参见 BorderTypesBORDER_WRAP 不支持。
borderValue常数边界情况下的边界值。默认值具有特殊含义。
另请参阅
dilate, erode, getStructuringElement

◆ sepFilter()

GMat cv::gapi::sepFilter ( const GMat & src,
int ddepth,
const Mat & kernelX,
const Mat & kernelY,
const Point & 锚点 (anchor),
const Scalar & delta,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.sepFilter(src, ddepth, kernelX, kernelY, anchor, delta[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

对矩阵(图像)应用可分离的线性滤波器。

此函数对矩阵应用可分离线性滤波器。即,首先,src 的每一行都使用一维核 kernelX 进行滤波。然后,结果的每一列都使用一维核 kernelY 进行滤波。返回最终结果。

支持的矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

注意
  • 在浮点计算的情况下,如果硬件支持,则进行四舍五入到最近的偶数(如果不支持,则四舍五入到最近的值)。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.sepfilter"
参数
src源图像。
ddepth目标图像所需的深度(支持 src.depth() 和 ddepth 的以下组合
 src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F
 src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F
 src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F
 src.depth() = CV_64F, ddepth = -1/CV_64F

当 ddepth=-1 时,输出图像将具有与源图像相同的深度)

参数
kernelX用于过滤每行的系数。
kernelY用于过滤每列的系数。
锚点 (anchor)核内的锚点位置。默认值 \((-1,-1)\) 表示锚点位于核中心。
delta在存储过滤结果之前添加到其中的值。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
boxFilter, gaussianBlur, medianBlur

◆ Sobel()

GMat cv::gapi::Sobel ( const GMat & src,
int ddepth,
int dx,
int dy,
int ksize = 3,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType[, borderValue]]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用扩展 Sobel 算子计算图像的一阶、二阶、三阶或混合导数。

除一种情况外,所有情况下都使用 \(\texttt{ksize} \times \texttt{ksize}\) 可分离核计算导数。当 \(\texttt{ksize = 1}\) 时,使用 \(3 \times 1\) 或 \(1 \times 3\) 核(即不进行高斯平滑)。ksize = 1 只能用于一阶或二阶 x 或 y 导数。

还有一个特殊值 ksize = FILTER_SCHARR (-1),它对应于 \(3\times3\) Scharr 滤波器,其结果可能比 \(3\times3\) Sobel 更准确。Scharr 孔径为

\[\vecthreethree{-3}{0}{3}{-10}{0}{10}{-3}{0}{3}\]

用于 x 导数,或转置用于 y 导数。

此函数通过将图像与适当的核进行卷积来计算图像导数

\[\texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}}\]

Sobel 算子结合了高斯平滑和微分,因此结果或多或少能够抵抗噪声。通常,此函数与 ( xorder = 1, yorder = 0, ksize = 3) 或 ( xorder = 0, yorder = 1, ksize = 3) 一起调用,以计算一阶 x 或 y 图像导数。第一种情况对应于以下核:

\[\vecthreethree{-1}{0}{1}{-2}{0}{2}{-1}{0}{1}\]

第二种情况对应于以下核:

\[\vecthreethree{-1}{-2}{-1}{0}{0}{0}{1}{2}{1}\]

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.sobel"
参数
src输入图像。
ddepth输出图像深度,参见 组合;对于 8 位输入图像,将导致截断的导数。
dxx 导数的阶数。
dyy 导数的阶数。
ksize扩展 Sobel 核的大小;它必须是奇数。
scale计算的导数值的可选比例因子;默认情况下不应用缩放(有关详细信息,请参见 cv::getDerivKernels)。
delta可选的 delta 值,在将结果存储到 dst 之前添加到结果中。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
filter2D, gaussianBlur, cartToPolar

◆ SobelXY()

std::tuple< GMat, GMat > cv::gapi::SobelXY ( const GMat & src,
int ddepth,
int order,
int ksize = 3,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python
cv.gapi.SobelXY(src, ddepth, order[, ksize[, scale[, delta[, borderType[, borderValue]]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

使用扩展 Sobel 算子计算图像的一阶、二阶、三阶或混合导数。

除一种情况外,所有情况下都使用 \(\texttt{ksize} \times \texttt{ksize}\) 可分离核计算导数。当 \(\texttt{ksize = 1}\) 时,使用 \(3 \times 1\) 或 \(1 \times 3\) 核(即不进行高斯平滑)。ksize = 1 只能用于一阶或二阶 x 或 y 导数。

还有一个特殊值 ksize = FILTER_SCHARR (-1),它对应于 \(3\times3\) Scharr 滤波器,其结果可能比 \(3\times3\) Sobel 更准确。Scharr 孔径为

\[\vecthreethree{-3}{0}{3}{-10}{0}{10}{-3}{0}{3}\]

用于 x 导数,或转置用于 y 导数。

此函数通过将图像与适当的核进行卷积来计算图像导数

\[\texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}}\]

Sobel 算子结合了高斯平滑和微分,因此结果或多或少能够抵抗噪声。通常,此函数与 ( xorder = 1, yorder = 0, ksize = 3) 或 ( xorder = 0, yorder = 1, ksize = 3) 一起调用,以计算一阶 x 或 y 图像导数。第一种情况对应于以下核:

\[\vecthreethree{-1}{0}{1}{-2}{0}{2}{-1}{0}{1}\]

第二种情况对应于以下核:

\[\vecthreethree{-1}{-2}{-1}{0}{0}{0}{1}{2}{1}\]

注意
  • 第一个返回的矩阵对应于 dx 导数,而第二个对应于 dy。
  • 如果硬件支持,则进行四舍五入到最近的偶数;否则,进行四舍五入到最近的整数。
  • 函数文本 ID 为 "org.opencv.imgproc.filters.sobelxy"
参数
src输入图像。
ddepth输出图像深度,参见 组合;对于 8 位输入图像,将导致截断的导数。
order导数的阶数。
ksize扩展 Sobel 核的大小;它必须是奇数。
scale计算的导数值的可选比例因子;默认情况下不应用缩放(有关详细信息,请参见 cv::getDerivKernels)。
delta可选的 delta 值,在将结果存储到 dst 之前添加到结果中。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参阅
filter2D, gaussianBlur, cartToPolar