OpenCV 4.10.0
开源计算机视觉库
加载中...
搜索中...
无匹配结果
函数
图 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))
 使用归一化的盒式滤波器对图像进行模糊处理。
 
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 算子计算图像的一阶、二阶、三阶或混合导数。
 

函数文档

◆ 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 值:为简便起见,可以将 2 个 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
返回值
与 src 大小和类型相同的目标图像。

◆ 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>

使用归一化的盒式滤波器对图像进行模糊处理。

该函数使用内核对图像进行平滑处理

\[\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_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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')\]

膨胀可以应用多次(iterations)。对于多通道图像,每个通道都独立处理。支持的输入矩阵数据类型为 CV_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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')\]

膨胀可以应用多次(iterations)。对于多通道图像,每个通道都独立处理。支持的输入矩阵数据类型为 CV_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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')\]

腐蚀可以应用多次(iterations)。对于多通道图像,每个通道都独立处理。支持的输入矩阵数据类型为 CV_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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 矩形结构元素对图像进行腐蚀。

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

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

◆ 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_8UC1CV_8UC3CV_16UC1CV_16SC1CV_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>

使用高斯滤波器对图像进行模糊处理。

该函数使用指定的 Gaussian 核对源图像进行滤波。输出图像必须与输入图像具有相同的类型和通道数。

支持的输入矩阵数据类型为 CV_8UC1CV_8UC3CV_16UC1CV_16SC1CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

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

◆ 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可选的增量值,在将结果存储在 dst 中之前将其添加到结果中。
borderType像素外推方法,请参阅 BorderTypesBORDER_WRAP 不受支持。
返回值
与 src 相同大小且具有相同通道数的目标图像。
另请参见
SobelScharr

◆ 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...
另请参见
boxFiltergaussianBlur

◆ 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在恒定边界情况下,边界值。默认值具有特殊含义。
另请参见
dilateerodegetStructuringElement

◆ 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 的每一行都用 1D 核 kernelX 进行滤波。然后,结果的每一列都用 1D 核 kernelY 进行滤波。最终结果将被返回。

支持的矩阵数据类型为 CV_8UC1CV_8UC3CV_16UC1CV_16SC1CV_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常数边界类型情况下的边界值
另请参见
boxFiltergaussianBlurmedianBlur

◆ 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可选的增量值,在将结果存储在 dst 中之前将其添加到结果中。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参见
filter2DgaussianBlurcartToPolar

◆ 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可选的增量值,在将结果存储在 dst 中之前将其添加到结果中。
borderType像素外推方法,请参见 cv::BorderTypes
borderValue常数边界类型情况下的边界值
另请参见
filter2DgaussianBlurcartToPolar