第9章 图像梯度 -- 9.2 Scharr 算子

相关链接:

  • Sobel 算子
  • Laplacian 算子 (拉普拉斯算子)

Scharr 算子

  1. Scharr 算子 和 Sobel算子
    Scharr 算子相对Sobel算子而言,具有更高的精度
    第9章 图像梯度 -- 9.2 Scharr 算子_第1张图片

  1. Scharr 算子函数原型:
dst_img = cv2.Scharr(src_img, ddepth, dx, dy, scale, delta)

参数:

  • dst_img:结果图像
  • src_img:原始图像
  • ddepth:输出图像的深度,
  • dx:x方向上的求导阶数,值为0时,表示在该方向上没有求导
  • dy:y方向上的求导阶数,值为0时,表示在该方向上没有求导
  • scale:代表计算导数值时的缩放因子。默认值是1,表示没有缩放。
  • delta:代表加到目标图像上的亮度值。默认值是0。
  1. 函数cv2.Sobel() 的参数ksize=-1时,会使用Scharr滤波器。所以,dst = cv2.Sobel(src_img, depth, fx, fy, -1)和dst = cv2.Scharr(src_img, depth, fx, fy)是等价的

  2. 与函数cv2.Sobel() 不同的是,不能同时设置dx=1,dy=1。 否则会报错

  3. 举例:

import cv2
import numpy as np

src_img = cv2.imread("/Users/manmi/Desktop/lena.bmp", 0)

sobel_x = cv2.Sobel(src_img, cv2.CV_64F, 1, 0, ksize=3)
sobel_x = cv2.convertScaleAbs(sobel_x)
sobel_y = cv2.Sobel(src_img, cv2.CV_64F, 0, 1, ksize=3)
sobel_y = cv2.convertScaleAbs(sobel_y)
sobel_xy = cv2.addWeighted(sobel_x, 0.5, sobel_y, 0.5, 0)

scharr_x = cv2.Scharr(src_img, cv2.CV_64F, 1, 0)
scharr_x = cv2.convertScaleAbs(scharr_x)
scharr_y = cv2.Scharr(src_img, cv2.CV_64F, 0, 1)
scharr_y = cv2.convertScaleAbs(scharr_y)
scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0)


cv2.imshow('sobel_xy', sobel_xy)
cv2.imshow('scharr_xy', scharr_xy)
cv2.waitKey()
cv2.destroyAllWindows()

输出为:

你可能感兴趣的:(OpenCV,深度学习,计算机视觉,人工智能,边缘检测)