OpenCV学习笔记(十)——利用腐蚀和膨胀进行梯度计算以及礼帽和黑帽

梯度计算

在OpenCV中,梯度计算是图像处理中的一个基本操作,用于分析图像中像素值的变化速率的方向,其中梯度的方向是函数变化最快的方向,因此在图像中,沿着梯度方向可以找到灰度值变化最大的区域,这通常是图像边缘所在的位置。

在OpenCV中,可以通过腐蚀和膨胀算图像的梯度。由上篇文章中提到膨胀和腐蚀操作可以计算图片的轮廓。

以下面这张图片为例:

现在对于梯度进行计算的代码如下所示:

python 复制代码
import cv2
import matplotlib.pyplot as plt
import numpy as np

img=cv2.imread(r'D:\Photo\3.png')
kernel=np.ones((5,5),np.uint8)
img_erosion=cv2.erode(img,kernel,iterations=1)
img_dilate=cv2.dilate(img,kernel,iterations=1)
img_new=img_dilate-img_erosion
cv2.imshow('img',img_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

通过上图的运行结果可以看到, 原图中j以及j里面的斑点被清晰地表示了出来,并且线条的轮廓还是比较清楚的,效果也不错。

膨胀减去腐蚀的图片显然是一个不错的选择,但是OpenCV中提供了一个专门的方式进行这种梯度的运算:

python 复制代码
import cv2

img=cv2.imread(r'D:\Photo\3.png')
kernel=np.ones((7,7),np.uint8)
img_gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('img_gradient',img_gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

可以看到上下两张图片的效果基本相同,在实际操作的时候选择两种方式均可。

礼帽和黑帽

(1)礼帽

礼帽变换是形态学图像处理中的一种操作,用于突出显示图像中的小亮区域。其中礼帽的做法是从原始图像中减去开运算的图像,结果是突出了亮度较周围更高的区域。简单来说,就是用原图来减去开运算的图像。

例如:

python 复制代码
import cv2
import numpy as np

img=cv2.imread(r'D:\Photo\3.png')
kernel= np.ones((5, 5),np.uint8)
img_opening= cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
res=img-img_opening
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

在上图中的白色斑点和隐约的线条就是所求的礼帽。在OpenCV中同样可以直接求得,写法为cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel),代码为:

python 复制代码
import cv2
import numpy as np

img=cv2.imread(r'D:\Photo\3.png')
kernel= np.ones((5, 5),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat',tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下 所示:

可以看到上下两张图片是完全相的,可以看到效果完全相同。

(2)黑帽

和礼帽一样,也是为了用于突出显示图像中的小亮区域。黑帽的操作是从闭运算的图像减去原图,结果是突出了亮度较周围更高的区域。简单来说,就是用闭运算的图像来减去原图。

同样,用闭运算减去原图图像:

python 复制代码
import cv2
import numpy as np

img=cv2.imread(r'D:\Photo\3.png')
kernel= np.ones((5, 5),np.uint8)
img_closeing= cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
res=img_closeing-img
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下所示:

和礼帽一样,黑帽也有另一种写法,写法为 cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel),代码如下所示:

python 复制代码
import cv2
import numpy as np

img=cv2.imread(r'D:\Photo\3.png')
kernel= np.ones((5, 5),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat',blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

可以看到两种结果是相同的,因此这两中在实际操作均可以。

相关推荐
小雷FansUnion1 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
资讯分享周1 小时前
扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
人工智能·powerpoint
叶子爱分享3 小时前
计算机视觉与图像处理的关系
图像处理·人工智能·计算机视觉
鱼摆摆拜拜3 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
一只鹿鹿鹿3 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
张较瘦_3 小时前
[论文阅读] 人工智能 | 深度学习系统崩溃恢复新方案:DaiFu框架的原位修复技术
论文阅读·人工智能·深度学习
cver1233 小时前
野生动物检测数据集介绍-5,138张图片 野生动物保护监测 智能狩猎相机系统 生态研究与调查
人工智能·pytorch·深度学习·目标检测·计算机视觉·目标跟踪
学技术的大胜嗷3 小时前
离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制
人工智能·深度学习·yolo·目标检测·机器学习
还有糕手3 小时前
西南交通大学【机器学习实验10】
人工智能·机器学习
江瀚视野3 小时前
百度文心大模型4.5系列正式开源,开源会给百度带来什么?
人工智能