Sobel 算子

提取轮廓 右减左,下减上

  • ddepth 一般指定-1,与输入一样(在 OpenCV 里,“图像深度(depth)” 指的其实就是 每个像素的数据类型(data type),比如是 8位整数16位整数 还是 32/64位浮点数 —— 而不是图像的“位深度”或“通道数”。)
  • dx, dy 为 0 或 1
sobelx = cv2.Sobel(img, cv2.CV64F, 1, 0, ksize=3)

cv2.CV64F 提升位数,表示负数,用于后面取绝对值(白到黑是正,黑到白就是负了)

sobelx = cv2.convertScaleAbs(sobelx)

取绝对值 总的梯度为两个方向上的求和

sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)

(不建议 dx dy 同时设为 1 之后同时计算)

例子:

Scharr 算子

数值比 Sobel 算子大,对结果差异更大更敏感,对原图像描绘更细致
是 Sobel 算子的精度优化版本,大小固定为 3

Laplacian 算子

二阶导,对变化更敏感,但是不足之处在于容易受到噪音点的影响 (中心与周围比较,无 dxdy

例子: