OpenCV 4.12.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 值:为了简单起见,您可以将两个 sigma 值设为相同。如果它们很小(< 10),滤镜效果不明显;如果它们很大(> 150),滤镜效果会非常强,使图像看起来像“卡通片”。

滤镜尺寸:大型滤镜(d > 5)非常慢,因此建议实时应用使用 d=5,而需要大量去噪的离线应用则可以使用 d=9。

此滤波器不支持原地操作。

注意
函数文本ID为 "org.opencv.imgproc.filters.bilateralfilter"
参数
srcSource 8-bit or floating-point, 1-channel or 3-channel image.
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_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')\]

膨胀可以应用多次 (iterations)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型有 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1CV_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')\]

膨胀可以应用多次 (iterations)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型有 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1CV_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')\]

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

注意
  • 如果硬件支持,则进行四舍五入到最近的偶数;如果不支持,则四舍五入到最近的整数。
  • 函数文本ID为 "org.opencv.imgproc.filters.erode"
参数
src输入图像
kernel用于腐蚀的结构元素;如果 element=Mat(),则使用 3x3 矩形结构元素。核可以使用 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 矩形结构元素对图像进行腐蚀。

该函数使用矩形结构元素和以矩形中心为锚点对源图像进行腐蚀。腐蚀可以应用多次(iterations)。对于多通道图像,每个通道独立处理。支持的输入矩阵数据类型有 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1CV_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>

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

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

支持的输入矩阵数据类型为 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在将结果存储到 dst 之前添加到结果中的可选 delta 值。
borderType像素外推方法,参见 BorderTypes。不支持 BORDER_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像素外推方法,参见 BorderTypes。不支持 BORDER_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位输入图像,它将导致截断的导数。
dx导数 x 的阶数。
dy导数 y 的阶数。
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