opencv学习笔记16:梯度运算之scharr算子及其函数使用 |
您所在的位置:网站首页 › 梯度算法笔记怎么写的图片 › opencv学习笔记16:梯度运算之scharr算子及其函数使用 |
前文介绍了sobel算子 opencv学习笔记14:sobel算子及其函数使用 scharr算子理论系数和sobel不一样,其他一样。 scharr函数使用dst=cv2.Scharr(src,ddpetph,dx,dy) dst:处理结果 src:源图像 ddpetph:图像深度 dx:x轴方向, dy:y轴方向 实际操作中,计算梯度值可能会出现负值而被截断。通常处理的图像类型为np.unit8,处理后的结果也是该类型,所有负数截断为0,发生信息丢失。 所以,在计算时,使用更高的数据类型cv2.CV_64F,取绝对值后再转换成np.unit8(cv2.CV_8U)。所以深度ddepth不写-1,改cv2.CV_64F cv2.convertScaleAbs(imgsrc) 取绝对值,并将梯度图像转换成256色位图,转换为unit8类型 scharr算例代码计算x轴梯度 import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharrx = cv2.Scharr(o,cv2.CV_64F,1,0) scharrx = cv2.convertScaleAbs(scharrx) # 转回uint8 cv2.imshow("original",o) cv2.imshow("x",scharrx) cv2.waitKey() cv2.destroyAllWindows()计算y轴梯度 import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharry = cv2.Scharr(o,cv2.CV_64F,0,1) scharry = cv2.convertScaleAbs(scharry) # 转回uint8 cv2.imshow("original",o) cv2.imshow("y",scharry) cv2.waitKey() cv2.destroyAllWindows()计算dx+dy import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharrx = cv2.Scharr(o,cv2.CV_64F,1,0) scharry = cv2.Scharr(o,cv2.CV_64F,0,1) scharrx = cv2.convertScaleAbs(scharrx) # 转回uint8 scharry = cv2.convertScaleAbs(scharry) scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) cv2.imshow("original",o) cv2.imshow("xy",scharrxy) cv2.waitKey() cv2.destroyAllWindows()错误示例:dx=1,dy=1 这点不同于sobel import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharrxy11=cv2.Scharr(o,cv2.CV_64F,1,1) cv2.imshow("original",o) cv2.imshow("xy11",scharrxy11) cv2.waitKey() cv2.destroyAllWindows()dx >= 0 && dy >= 0 && dx+dy == 1 注意: dst=cv2.Scharr(src,cv2.CV_64F,dx,dy) 等于 dst=cv2.Sobel(src,cv2.CV_64F,dx,dy,-1) Sobel对一个卷积核参数,默认为3.当卷积核=-1时,表示Scharr函数 总目录链接: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版梯度讲解: opencv进阶学习笔记10:图像金字塔和图像梯度 电气专业的计算机小白,写博文不容易。如果你觉得本文对你有用,请点个赞支持下,谢谢。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |