图像梯度
image = imread('zhuanqiang.jpg')
show(image)
def gradient(image):
image = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
#使用拉普拉斯算子
#cv2.CV_64F输出图像的深度(数据类型),64位float类型,因为梯度可能是正也可能是负
laplacian = cv2.Laplacian(image,cv2.CV_64F)
#1,0表示在x方向求一阶导数,最大可以求2阶导数(比如改成2,0即求2阶导数)
sobelx = cv2.Sobel(image,cv2.CV_64F,1,0,ksize=3)
#0,1表示在y方向求一阶导数,最大可以求2阶导数
sobely = cv2.Sobel(image,cv2.CV_64F,0,1,ksize=3)
titles = ['Original','Laplacian','SobelX','SobelY']
images = [image,laplacian,sobelx,sobely]
plt.figure(figsize=(10,5))
for i in range(4):
plt.subplot(2,2,i+1)
plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.axis('off')
plt.show()
gradient(image)
#sobelx只剩下y方向上的一些边界,sobely只剩下x方向上的一些边界
#而拉普拉斯较好的保留了所有边界
image = imread('chepai.jpeg')
gradient(image)
sobelx只剩下y方向上的一些边界,sobely只剩下x方向上的一些边界
而拉普拉斯较好的保留了所有边界