opencv 梯度直方图,opencv 梯度

  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,专业电器计算机,写博文不容易。如果你觉得这篇文章对你有用,请点赞支持。谢谢你。

opencv 梯度直方图,opencv 梯度