首页 > 其他 > 详细

OpenCV--图像梯度处理

时间:2020-02-10 16:35:56      阅读:68      评论:0      收藏:0      [点我收藏+]

图像梯度-Sobel算子

技术分享图片

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

效果:

技术分享图片

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

ddepth:图像的深度
dx和dy分别表示水平和竖直方向
ksize是Sobel算子的大小

def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)

cv_show(sobelx,sobelx)

效果:

技术分享图片

sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx = cv2.convertScaleAbs(sobelx) #白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值
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) #分别计算x和y,再求和的结果
cv_show(sobelxy,sobelxy)

效果:

技术分享图片

sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3) #直接计算的效果,不是很好
sobelxy = cv2.convertScaleAbs(sobelxy) 
cv_show(sobelxy,sobelxy)

效果:

技术分享图片

img = cv2.imread(lena.jpg,cv2.IMREAD_GRAYSCALE)
cv_show(img,img)

效果:

技术分享图片

img = cv2.imread(lena.jpg,cv2.IMREAD_GRAYSCALE)
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)

效果:

技术分享图片

img = cv2.imread(lena.jpg,cv2.IMREAD_GRAYSCALE)

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

效果:

技术分享图片

图像梯度-Scharr算子与laplacian算子

 技术分享图片

Scharr算子Gy右边的-3改为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)

效果:

技术分享图片

OpenCV--图像梯度处理

原文:https://www.cnblogs.com/SCCQ/p/12291183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!