图像梯度处理
Sobel算子
dst = cv2.Sobel(src,ddepth,dx,dy,ksize)
src :需要处理的图片
ddepth :图像的深度,一般为-1
dx和dy分别表示水平和竖直方向
ksize:Sobel算子的大小
cv2.CV_64F代表每一个像素点元素占64位浮点数,是opencv定义的数据类型。
#
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
cv_show("sobelx",sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)
cv_show('sobely',sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_show("sobelxy",sobelxy)
#分别计算x和y,再求和
不建议直接将dx和dy的参数同时设为1计算,这样会导致图片较为模糊,部分细节缺失
下面是两种情况的图片对比:
这个是分别计算再相加的图片
这个是直接计算的图片
可以看出直接计算的照片明显较为模糊
Scharr算子
Scharr算子(对结果更敏感),将图像结果描绘的比Sobel算子更为细致
dst = cv2.Scharr(src,ddepth,dx,dy,ksize)
src :需要处理的图片
ddepth :图像的深度,一般为-1
dx和dy分别表示水平和竖直方向
ksize:Scharr算子的大小
sobelxy1 = cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
sobelxy1 = cv2.convertScaleAbs(sobelxy1)
cv_show('sobelxy1',sobelxy1)
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharry = cv2.convertScaleAbs(scharry)
scharrx = cv2.convertScaleAbs(scharrx)
scharrxy = cv2.addWeighted(scharry,0.5,scharrx,0.5,0)
cv_show("schar",scharrxy)
laplacian算子
laplacian算子(对变化更敏感,对噪音点更为敏感,一般不单独使用)
lapliacian = cv2.Laplacian(img,cv2.CV_64F,ksize=3)
cv_show("lap",lapliacian)