无备案网站 阿里联盟,搜索引擎有哪些分类,东至网站定制,通讯设备东莞网站建设梯度计算
在OpenCV中#xff0c;梯度计算是图像处理中的一个基本操作#xff0c;用于分析图像中像素值的变化速率的方向#xff0c;其中梯度的方向是函数变化最快的方向#xff0c;因此在图像中#xff0c;沿着梯度方向可以找到灰度值变化最大的区域#xff0c;这通常是…梯度计算
在OpenCV中梯度计算是图像处理中的一个基本操作用于分析图像中像素值的变化速率的方向其中梯度的方向是函数变化最快的方向因此在图像中沿着梯度方向可以找到灰度值变化最大的区域这通常是图像边缘所在的位置。
在OpenCV中可以通过腐蚀和膨胀算图像的梯度。由上篇文章中提到膨胀和腐蚀操作可以计算图片的轮廓。
以下面这张图片为例 现在对于梯度进行计算的代码如下所示
import cv2
import matplotlib.pyplot as plt
import numpy as npimgcv2.imread(rD:\Photo\3.png)
kernelnp.ones((5,5),np.uint8)
img_erosioncv2.erode(img,kernel,iterations1)
img_dilatecv2.dilate(img,kernel,iterations1)
img_newimg_dilate-img_erosion
cv2.imshow(img,img_new)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下所示 通过上图的运行结果可以看到 原图中j以及j里面的斑点被清晰地表示了出来并且线条的轮廓还是比较清楚的效果也不错。
膨胀减去腐蚀的图片显然是一个不错的选择但是OpenCV中提供了一个专门的方式进行这种梯度的运算
import cv2imgcv2.imread(rD:\Photo\3.png)
kernelnp.ones((7,7),np.uint8)
img_gradientcv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
cv2.imshow(img_gradient,img_gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下所示 可以看到上下两张图片的效果基本相同在实际操作的时候选择两种方式均可。
礼帽和黑帽
1礼帽
礼帽变换是形态学图像处理中的一种操作用于突出显示图像中的小亮区域。其中礼帽的做法是从原始图像中减去开运算的图像结果是突出了亮度较周围更高的区域。简单来说就是用原图来减去开运算的图像。
例如
import cv2
import numpy as npimgcv2.imread(rD:\Photo\3.png)
kernel np.ones((5, 5),np.uint8)
img_opening cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
resimg-img_opening
cv2.imshow(res,res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下所示 在上图中的白色斑点和隐约的线条就是所求的礼帽。在OpenCV中同样可以直接求得写法为cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)代码为
import cv2
import numpy as npimgcv2.imread(rD:\Photo\3.png)
kernel np.ones((5, 5),np.uint8)
tophatcv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow(tophat,tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下 所示 可以看到上下两张图片是完全相的可以看到效果完全相同。 2黑帽
和礼帽一样也是为了用于突出显示图像中的小亮区域。黑帽的操作是从闭运算的图像减去原图结果是突出了亮度较周围更高的区域。简单来说就是用闭运算的图像来减去原图。
同样用闭运算减去原图图像
import cv2
import numpy as npimgcv2.imread(rD:\Photo\3.png)
kernel np.ones((5, 5),np.uint8)
img_closeing cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
resimg_closeing-img
cv2.imshow(res,res)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下所示 和礼帽一样黑帽也有另一种写法写法为 cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)代码如下所示
import cv2
import numpy as npimgcv2.imread(rD:\Photo\3.png)
kernel np.ones((5, 5),np.uint8)
blackhatcv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow(blackhat,blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下 可以看到两种结果是相同的因此这两中在实际操作均可以。