图像梯度——Sobel、Scharr、Laplacian

这篇具有很好参考价值的文章主要介绍了图像梯度——Sobel、Scharr、Laplacian。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图像梯度-Sobel算子

图像梯度——Sobel、Scharr、Laplacian

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

  • src: 图像数组变量
  • ddepth: 图像的深度,一般填-1,表示与原始图像深度一致;
    cv2.CV_64F表示每一个像素点值为64位浮点数,是OpenCV定义的数据类型
  • dx和dy分别表示水平和竖直方向,1表示计算该方向的梯度,0表示不计算
  • ksize是Sobel算子的大小,是一个整型
# Sobel算子的大小通常为3*3,其计算实质就是右边减左边、下面减上面
img = cv2.imread('F:/aixin.jpg')
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', sobelx)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 上面计算得到的图像结果中,所有的负数都会截断成0,这并不一定是我们想要的
# 通过下面的方法取绝对值,这样就可以只关注梯度计算时的变化量
img = cv2.imread('F:/aixin.jpg')
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobelx = cv2.convertScaleAbs(sobelx)  # 取绝对值
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', sobelx)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 当x方向和y方向的梯度都要计算时,不建议直接将参数dx和dy的值同时设为1,因为这样会导致图像较为模糊,部分细节丢失;可以分别计算再相加
img = cv2.imread('F:/aixin.jpg')
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)

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

image = cv2.hconcat((sobelx, sobely, sobelxy, sobelxy11))
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像梯度-Scharr算子

图像梯度——Sobel、Scharr、Laplacian

# Scharr算子跟Sobel算子很相似,不同的是Scharr算子的值更大,使得梯度计算结果的差异更明显
# Scharr算子对梯度信息更敏感,能捕捉到更丰富的梯度信息
# Scharr函数中没有ksize参数
img = cv2.imread('F:/aixin.jpg')
scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharrx = cv2.convertScaleAbs(scharrx)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharry = cv2.convertScaleAbs(scharry)
scharrxy = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
image = cv2.hconcat((scharrx, scharry, scharrxy))
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像梯度-Laplacian算子

图像梯度——Sobel、Scharr、Laplacian文章来源地址https://www.toymoban.com/news/detail-511556.html

# 不建议单独使用Laplacian算子,适合与其他工具协同使用
# Laplacian算子中没有dx、dy参数,有ksize参数
img = cv2.imread('F:/aixin.jpg')
laplacian = cv2.Laplacian(img, cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()

到了这里,关于图像梯度——Sobel、Scharr、Laplacian的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包