OpenCV图像处理笔记[05]
26. sobel理论基础
27. sobel算计及其函数使用
dst = cv2.Sobel( src, ddepth, dx, dy, [ ksize ])
dst, 计算结果 src, 原始图像
ddepth, 处理结果图像深度
dx, x轴方向
dy, y轴方向
ksize, 核大小
- ddepth, 处理结果图像深度
通常情况下,可以将该参数的值设置为-1,让处理结果与原始图像保持一致
实际操作中,计算梯度值可能会出现负数。通常处理的图像是np.unit8类型,如果结果也是该类型,所有负数会自动截断为0,发生信息丢失。所以通常计算时,使用更高的数据类型,cv.CV_64F, 取绝对值后,再转换为np.unit8(cv2.CV_8U)类型。
dst = cv2.convertScaleAbs( src [, alpha [ , beta]])
作用: 将原始图像src转换为256色位图
公式: 目标图像 = 调整 ( 原始图像 * alpha + beta )
直接调整: 目标图像 = cv2.convertScaleAbs( 原始图像 )
-
dx , x 轴方向
-
dy , y 轴方向
计算x方向梯度 : 【dx = 1, dy =0]
计算y方向梯度 : 【dx = 0, dy =1]
-
计算sobel结果
-
-
方式1
dx = 1, dy = 1
dst = cv2.Sobel( src, ddepth, 1, 1 )
-
-
-
方式2
dx = cv2.Sobel( src, ddepth, 1, 0 )
dy = cv2.Sobel( src, ddepth, 0, 1 )
dst = dx + dy
dst = dx * 系数1 + dy * 系数2
函数
dst = cv2.addWeighted(src1,alpha,src2,beta,gamma)功能: 计算两幅图像的权重和
dst,计算结果 src1, 源图像1
alpha, 源图像1的系数
src2, 源图像2
beta, 源图像2的系数
gamma, 修正值
关系 dst( I ) = saturate ( src1 ( I ) * alpha + src2( I ) * beta + gamma)
例: dst = cv2.addWeighted(src1,0.5,src2,0.5,0) -
-
28. scharr算子函数及其使用
使用3 * 3的sobel算子时,可能不太精准,scharr算子效果更好
dst = Scharr ( src , ddpeth, dx, dy )
dst,计算结果 src1, 原始图像
ddepth, 处理结果图像深度
dx, x轴方向
dy, y轴方向
ddepth, 处理结果图像深度
dst = Scharr ( src, cv2.CV_64F, dx, dy )
dst = cv2.convertScaleAbs( dst )
dx, x轴方向 dy, y轴方向
dst = Scharr ( src, ddpeth, dx = 1, dy = 0 )
dst = Scharr ( src, ddpeth, dx = 0, dy = 1 )
两个方向的梯度 = dx + dy
scharrxy = cv2.addWeighted ( scharrx, 0.5, scharry, 0.5, 0 )
满足条件: dx >= 0 && dy >= 0 && dx + dy == 1
dst = Scharr ( src , ddpeth, dx, dy )
等价于
dst = cv2.Sobel( src, ddepth, dx, dy, -1)
29. sobel算子和scharr算子的比较
不同之处:系数不同
相同: 使用的卷积核大小一样,运算速度一样
scharr更精密一点
30. laplacian算子及其使用
拉普拉斯算子类似于二阶sobel导数。实际上,在OpenCV中通过调用sobel算子来计算拉普拉斯算子。
一阶导数 sobel算子 = |左 - 右| + |下 - 上| scharr算子 = |左 - 右| + |下 - 上|
二阶导数 Laplacian算子 = |左 - 右| + |下 - 上| + |左 - 右| + |下 - 上|
-
dst = cv2.Laplacian( src, ddepth )
-
dst , 结果图像
-
src , 原始图像
-
ddepth , 图像深度
-
通常情况下,可以将该参数的值设为-1,让处理结果与原始图像保持一致。
-
实际操作中,计算梯度值可能会出现负数。
通常处理的图像是np.uint8类型,如果结果也是该类型,所有负数会自动截断为0,发生信息丢失。
所以,通常计算时,使用更高的数据类型cv2.CV_64F,取绝对值后,再转换为np.uint8(cv2℃v81-J)类型。出现负数时:dst = cv2.convertScaIeAbs(src)
将原始图像调整为256色位图。
示例:目标图像 = cv2.convertScaleAbs(原始图像)
-
-