opencv学习笔记16:梯度运算之scharr算子及其函数使用

前文介绍了sobel算子
opencv学习笔记14:sobel算子及其函数使用

scharr算子理论

opencv学习笔记16:梯度运算之scharr算子及其函数使用_第1张图片
系数和sobel不一样,其他一样。
opencv学习笔记16:梯度运算之scharr算子及其函数使用_第2张图片

scharr函数使用

dst=cv2.Scharr(src,ddpetph,dx,dy)
dst:处理结果
src:源图像
ddpetph:图像深度
dx:x轴方向,
dy:y轴方向

实际操作中,计算梯度值可能会出现负值而被截断。通常处理的图像类型为np.unit8,处理后的结果也是该类型,所有负数截断为0,发生信息丢失。
所以,在计算时,使用更高的数据类型cv2.CV_64F,取绝对值后再转换成np.unit8(cv2.CV_8U)。所以深度ddepth不写-1,改cv2.CV_64F
cv2.convertScaleAbs(imgsrc)
取绝对值,并将梯度图像转换成256色位图,转换为unit8类型opencv学习笔记16:梯度运算之scharr算子及其函数使用_第3张图片

scharr算例代码

计算x轴梯度

import cv2
import numpy as np
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
scharrx = cv2.convertScaleAbs(scharrx)   # 转回uint8
cv2.imshow("original",o)
cv2.imshow("x",scharrx)
cv2.waitKey()
cv2.destroyAllWindows()

opencv学习笔记16:梯度运算之scharr算子及其函数使用_第4张图片
计算y轴梯度

import cv2
import numpy as np
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
scharry = cv2.convertScaleAbs(scharry)  # 转回uint8
cv2.imshow("original",o)
cv2.imshow("y",scharry)
cv2.waitKey()
cv2.destroyAllWindows()

opencv学习笔记16:梯度运算之scharr算子及其函数使用_第5张图片
计算dx+dy

import cv2
import numpy as np
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)   # 转回uint8  
scharry = cv2.convertScaleAbs(scharry)  
scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0)  
cv2.imshow("original",o)
cv2.imshow("xy",scharrxy)
cv2.waitKey()
cv2.destroyAllWindows()

opencv学习笔记16:梯度运算之scharr算子及其函数使用_第6张图片
错误示例:dx=1,dy=1
这点不同于sobel

import cv2
import numpy as np
o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE)
scharrxy11=cv2.Scharr(o,cv2.CV_64F,1,1)
cv2.imshow("original",o)
cv2.imshow("xy11",scharrxy11)
cv2.waitKey()
cv2.destroyAllWindows()

dx >= 0 && dy >= 0 && dx+dy == 1
在这里插入图片描述
注意:
dst=cv2.Scharr(src,cv2.CV_64F,dx,dy)
等于
dst=cv2.Sobel(src,cv2.CV_64F,dx,dy,-1)

Sobel对一个卷积核参数,默认为3.当卷积核=-1时,表示Scharr函数

电气专业的计算机小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。

你可能感兴趣的:(CV,opencv,计算机视觉,python)