04计算机视觉-opencv图像梯度处理

import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

1 图像梯度-Sobel算子

[外链图片转存失败(img-kxijQeIx-1565701492632)(sobel_1.png)]

img = cv2.imread("pie.png",cv2.IMREAD_GRAYSCALE)

cv_show("img",img)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x1f6e49302b0>

[外链图片转存失败(img-hEQMo4sB-1565701492633)(output_3_1.png)]

dst = cv2.Sobel(src, ddepth, dx, dy, ksize)

  • ddepth:图像的深度

  • dx和dy分别表示水平和竖直方向

  • ksize是Sobel算子的大小

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)

cv_show("sobelx",sobelx)
plt.imshow(sobelx)
<matplotlib.image.AxesImage at 0x1f6e7a06978>

[外链图片转存失败(img-50eXFf9D-1565701492633)(output_5_1.png)]

sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)  

cv_show("sobely",sobely)
plt.imshow(sobely)
<matplotlib.image.AxesImage at 0x1f6f7cb80f0>

[外链图片转存失败(img-DCpuPjrW-1565701492634)(output_6_1.png)]

分别计算x和y,再求和

sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)

cv_show("sobelxy",sobelxy)
plt.imshow(sobelxy)
<matplotlib.image.AxesImage at 0x1f6f78cd400>

[外链图片转存失败(img-TrDMMDed-1565701492635)(output_8_1.png)]

直接计算,效果一般般

sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)

cv_show("sobelxy",sobelxy)
plt.imshow(sobelxy)
<matplotlib.image.AxesImage at 0x1f6e3f0f208>

[外链图片转存失败(img-3EnyfMVq-1565701492636)(output_10_1.png)]

# 例子
img = cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)
cv_show("img",img)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x1f6e441b048>

[外链图片转存失败(img-Ht1p96dO-1565701492636)(output_11_1.png)]

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv_show("sobelxy",sobelxy)
plt.imshow(sobelxy)
<matplotlib.image.AxesImage at 0x1f6e77a0668>

[外链图片转存失败(img-1lri2PUd-1565701492637)(output_12_1.png)]

2 图像梯度-Scharr算子

[外链图片转存失败(img-hDqDwSGQ-1565701492638)(scharr.png)]

3 图像梯度-laplacian算子

#不同算子的差异
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)   
sobely = cv2.convertScaleAbs(sobely)  
sobelxy =  cv2.addWeighted(sobelx,0.5,sobely,0.5,0)  

scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrx = cv2.convertScaleAbs(scharrx)   
scharry = cv2.convertScaleAbs(scharry)  
scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0) 

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   

res = np.hstack((sobelxy,scharrxy,laplacian))

cv_show("res",res)
plt.imshow(res)
<matplotlib.image.AxesImage at 0x1f6e78c1780>

[外链图片转存失败(img-KPLXzyD0-1565701492640)(output_18_1.png)]


发布了478 篇原创文章 · 获赞 417 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/Mind_programmonkey/article/details/99475885
今日推荐