原始图片:
1、Sobel()
Sobel 算子结合了高斯平滑和微分,用于计算图像的梯度,从而突出显示边缘。
import cv2
# 读取图像
image = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# 使用 Sobel 算子查找水平和垂直边缘
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3)
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3)
# 叠加水平和垂直边缘
edges = cv2.addWeighted(cv2.convertScaleAbs(sobel_x), 0.5, cv2.convertScaleAbs(sobel_y), 0.5, 0)
# 显示结果
cv2.imshow("Original Image", image)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
函数原型:
sobel = cv2.Sobel(src, ddepth, dx, dy, ksize, scale, delta, borderType)
参数说明:
- src: 输入图像(单通道,例如灰度图)。
- ddepth: 输出图像的深度(例如
cv2.CV_64F
表示 64 位浮点数)。 - dx: x 方向上的导数阶数(0表示没有导数,1表示一阶导数)。
- dy: y 方向上的导数阶数(与 dx 类似)。
- ksize: Sobel 核的大小,必须是 1, 3, 5 或 7 等奇数。
- scale: 可选值,缩放导数结果,以便调整图像亮度(默认值为 1)。
- delta: 可选值,在存储之前添加到结果中的值(默认值为 0)。
- borderType: 边界类型,用于确定图像边界(默认值为
cv2.BORDER_DEFAULT
)。
2、Scharr()
Scharr 算子是一种改进的 Sobel 算子,适用于增强边缘检测的精度,在正常的 Sobel 核的尺寸上有更好的性能。
scharr_x = cv2.Scharr(src, ddepth, dx, dy, scale, delta, borderType)
参数说明:</