ToB企服应用市场:ToB评测及商务社交产业平台

标题: 09. 算子(索贝尔、沙尔、拉普拉斯算子) [打印本页]

作者: 大号在练葵花宝典    时间: 2022-8-9 14:42
标题: 09. 算子(索贝尔、沙尔、拉普拉斯算子)
1. 索贝尔(sobel)算子

前面的各种滤波,可以视为低通滤波,后面的各种算子可以视为高通滤波,区别:前面的滤波都是降噪的,算子都是来找图像边界、边缘的。索贝尔算子模拟一阶求导,倒数越大的地方说明变换越剧烈,越有可能是边缘。
Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])

  1. import cv2
  2. import numpy as np
  3. img = cv2.imread('./bg.jpg')
  4. dx = cv2.Sobel(img, cv2.CV_64F, dx=1, dy=0, ksize=3)
  5. # 计算y轴方向的梯度,只有水平方向的边缘
  6. dy = cv2.Sobel(img, cv2.CV_64F, dx=0, dy=1, ksize=3)
  7. # dst = cv2.add(dx, dy)  或以下写法
  8. dst = cv2.addWeightd(dx, 0.5, dy, 0.5, gamma=0)
复制代码
  1. import cv2
  2. import numpy as np
  3. # 卷积
  4. bg = cv2.imread('images/pau3W8ytsv.jpg')
  5. print(bg.shape)
  6. cv2.namedWindow('image', cv2.WINDOW_NORMAL)
  7. cv2.resizeWindow('image', 800, 375)
  8. # dx = cv2.Sobel(bg, -1, dx=1, dy=0, ksize=3)
  9. # dy = cv2.Sobel(bg, -1, dx=0, dy=1, ksize=3)
  10. # 这种写法和上面的写法是一样的,这些算子,就是通过不同的卷积核来实现的
  11. kx = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], np.float32)
  12. ky = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]], np.float32)
  13. dx = cv2.filter2D(bg, -1, kx)
  14. dy = cv2.filter2D(bg, -1, ky)
  15. print(dx.shape, dx.dtype)
  16. print(dy.shape, dy.dtype)
  17. dst = cv2.add(dx, dy)
  18. cv2.imshow('image', bg)
  19. cv2.imshow('dst', dst)
  20. cv2.waitKey(0)
  21. cv2.destroyAllWindows()
复制代码
2. 沙尔(Scharr)算子

Scharr(src, ddepth, dx, dy[, dst[, scale[, delta[, borderType]]]])
3. 拉普拉斯算子

原理:在一阶导数上,在求导,二阶导数为0,利用这一特性去寻找图像的边缘


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4