opencv 梯度直方图,opencv 梯度
python opencv
Sobel算子理论从不同方向计算梯度。
如图所示,从X轴计算p5的梯度。左边的卷积核系数是
如果右边这一列和左边这一列相差很大,则计算出来的P5x很大,可以认为在边界上。否则不在边界上。用于求出图像边界
。也可以从Y轴计算梯度
如果上下相差很大,则计算出来的值很大,则认为是边界,否则不是
。
整个图像梯度
Sobel函数使用dst=cv2.sobel (src,d深度,dx,dy,[kszie])
Dst:处理结果
Src:原始图像
Ddpepth:已处理图像的深度。-1表示与原始图像相同。
Dx:x轴方向,计算X轴方向,dx=1,dy=0
Dy:y轴方向,计算Y轴,dx=0,dy=1
[ksize]:核心尺寸,默认为3。
当不使用绝对值时,负值被截断为0。
实际上,计算出的梯度值可能出现负值并被截断。通常处理的图像类型是np.unit8,处理的结果也是同一类型。所有负数都被截断为0,导致信息丢失。
因此,在计算中,较高的数据类型cv2。使用CV_64F,然后将绝对值转换成np.unit8(cv2。CV_8U)。
所以深度ddepth不写-1,改cv2.CV_64F
cv2.convertScaleAbs(imgsrc)
取绝对值,将渐变图像转换成256色位图,转换成unit8类型。
计算方法
第一个是同时计算xy梯度。第一个有缺陷。
第二种方法是计算。分别计算和求和。
用途:处理结果
dst = cv2.addWeighted(图像1src1,系数1,图像2src2,系数2,修正系数gamma)
当sobel函数代码深度ddepth=-1时
导入cv2import numpy为npo=cv2.imread(sobel4.bmp ,cv2。IMREAD _ gray)sobelx=cv2。Sobel(o,-1,1,0,ksize=3)cv2.imshow(original ,O) cv2。imshow (x ,sobelx) cv2。waitkey () cv2。破坏性地,windows()可以发现x轴的左边界部分没有被捕获。
当depth=cv2.cv _ 64f时,不添加cv2.convertScaleAbs(imgsrc)。
导入cv2import numpy为npo=cv2.imread(sobel4.bmp ,cv2。IMREAD _ gray)sobelx=cv2。索贝尔(o,cv2。CV_64F,1,0,ksize=3)cv2.imshow(original ,O) cv2。imshow (x ,sobelx) cv2。waitkey () cv2。破坏性地,windows()可以发现x轴的左边界部分没有被捕获。
这是因为没有取绝对值。
添加cv2.convertScaleAbs(imgsrc)。
有一个abs绝对值在里面
深度=cv2。cv _ 64f。添加cv2.convertScaleAbs(imgsrc),
导入cv2import numpy为npo=cv2.imread(sobel4.bmp ,cv2。IMREAD _ gray)sobelx=cv2。索贝尔(o,cv2。CV_64F,1,0,K=3)sobelx=cv2 . convertscaleabs(sobelx)#转回uint8cv2.imshow (original ,o) cv2.imshow (x ,sobelx)cv2 . wait key()cv2 . destructive ly windows()完美获取边界。
并将x和y梯度系数相加。
导入cv2import numpy为npo=cv2.imread(sobel4.bmp ,cv2。IMREAD _ gray)sobelx=cv2。索贝尔(o,cv2。CV_64F,1,0,ksize=3)sobely=cv2。索贝尔(o,2。CV _ 64F,0,1,k size=3) Sobelx=CV2。Convertscaleabs (Sobelx) #转回uint8sobely=CV2。convertscaleabs(sobely)Sobel xy=CV2。添加加权(sobelx,0.5,sobely,0.5,0) cv2.imshow (original ,o) cv2.imshow (x ,sobelx) cv2.imshow (y ,sobely) cv2.imshow (xy ,sobelxy)cv2 . wait key()cv2 . destroy .即dx=1,dy=1
导入cv2import numpy为npo=cv2.imread(sobel4.bmp ,cv2。IMREAD _ gray)Sobel xy 11=cv2。索贝尔(o,cv2。CV_64F,1,1,ksize=3)cv2.imshow(original ,O) cv2.imshow (xy11 ,Sobel xy 11)cv2 . wait key()cv2 . destructive ly windows()不起作用。放弃这种方法。
总目录链接:
3 python3 opencv学习笔记汇总目录(适合基础入门学习)
高级渐变解释:
Opencv高级学习笔记10:图像金字塔和图像渐变
Xsdwd,专业电器计算机,写博文不容易。如果你觉得这篇文章对你有用,请点赞支持。谢谢你。