Opencv进阶---图像梯度处理

1、图像梯度—Sobel算子
左边减去右边得到梯度差异
Gx为水平方向上的梯度,右减去左
Gy为垂直方向上的差梯度,下减去上
Opencv进阶---图像梯度处理_第1张图片
dst=cv.Sobel(src,ddepth,dx,dy,ksize)
ddepth:图像的深度,通常设置为-1,表示的深度与输出深度一样
dx,dy分别表示水平方向和竖直方向,去0或者1,取1表示该方向
ksize为Sobel算子的大小,一般为3*3
X轴方向上的梯度:
代码:
当ddepth=-1时

sobelX=cv.Sobel(src,-1,1,0,ksize=3)

结果:
Opencv进阶---图像梯度处理_第2张图片
黑到白是正数,白到黑是负数,所有的负数会被阶段成0,所以要取绝对值

sobelX=cv.Sobel(src,cv.CV_64F,1,0,ksize=3)
sobleX=cv.convertScaleAbs(sobelX)#取绝对值操作

结果:
Opencv进阶---图像梯度处理_第3张图片
Y轴方向上的梯度:

sobelY=cv.Sobel(src,cv.CV_64F,0,1,ksize=3)
sobleY=cv.convertScaleAbs(sobelY)#取绝对值操作

Opencv进阶---图像梯度处理_第4张图片
分别计算X、Y,再求和,不建议直接计算,会有丢失、重影等现象

sobelXY=cv.addWeighted(sobelX,0.5,sobelY,0.5,0)#权重根据实际需要来设定

结果:
Opencv进阶---图像梯度处理_第5张图片

2、图像梯度—Scharr算子
相较于sobel算子,它的矩阵值更大,即结果差异更加明显,描绘的东西更加细致
Opencv进阶---图像梯度处理_第6张图片
X轴方向:

scharrX=cv.Scharr(src,cv.CV_64F,1,0)
scharrX=cv.convertScaleAbs(scharrX)

Opencv进阶---图像梯度处理_第7张图片
Y轴方向:

scharrY=cv.Scharr(src,cv.CV_64F,0,1)
scharrY=cv.convertScaleAbs(scharrY)

Opencv进阶---图像梯度处理_第8张图片
总的梯度:

scharrXY=cv.addWeighted(scharrX,0.5,scharrY,0.5,0)

Opencv进阶---图像梯度处理_第9张图片
3、图形梯度—laplacian算子
部分X、Y轴方希那个
对噪音点敏感,应该配合其他函数配合使用
最近的为-1,自身为-4,其他为0
Opencv进阶---图像梯度处理_第10张图片

laplacianY=cv.Laplacian(src,cv.CV_64F)
laplacianY=cv.convertScaleAbs(laplacianY)

Opencv进阶---图像梯度处理_第11张图片

你可能感兴趣的:(OpenCV)