import cv2 as cv
import numpy as np
def sobel_demo(image):
grad_x = cv.Scharr(image, cv.CV_32F, 1, 0) # 图像 图像深度,支持src.depth()和ddepth的组合 x方向上差分阶数 y方向差分阶数 1, 0=》对X求一阶导
grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)#对y求一阶导
gradx = cv.convertScaleAbs(grad_x) #用convertScaleAbs()函数将其转回原来的uint8形式
grady = cv.convertScaleAbs(grad_y)
cv.imshow("gradient-x", gradx) #x方向上的梯度
cv.imshow("gradient-y", grady)#y方向上的梯度
gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0) #图片融合
cv.imshow("gradient", gradxy)
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/example/1.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
sobel_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
原图效果
gradient-x效果
gradient-y效果
gradient效果