OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算

文章目录

  • 前言
  • 一、图像的膨胀
    • 1.1 膨胀原理
    • 1.2 膨胀实现
    • 1.3 结果展示
  • 二、开闭运算
    • 2.1 开运算实现与结果
    • 2.2 闭运算实现与结果
  • 三、梯度运算
    • 3.1 梯度介绍
    • 3.2 梯度实现
    • 3.3 结果展示
  • 总结

前言

在系列2中已经分享了图像的叠加、填充和腐蚀,接下来将继续分享图像的膨胀、开闭运算和梯度运算。

一、图像的膨胀

1.1 膨胀原理

与图像的腐蚀操作相反,膨胀的原理实质为“或”运算,即通过定义卷积核与图像像素点数据进行“或”运算。当卷积核包围被包围颜色通道数据时,图像颜色通道数据保持不变;当卷积核同时包围两种颜色通道数据时,全部变换为被包围颜色通道数据,从而实现强化图像的轮廓作用。

1.2 膨胀实现

dilate=cv2.dilate(img,kernel,iterations=1)

cv2.dilate() 函数包括以下三个参数:

  • 要进行膨胀运算的图像颜色通道数据
  • 膨胀操作所使用的卷积核大小
  • 膨胀的迭代次数

注:卷积核的定义见系列2。

1.3 结果展示

OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算_第1张图片
图片为初始图像进行三次迭代的结果。由图可知,膨胀操作会放大小且无意义的物体,但会增强整体的轮廓,因此图像的腐蚀与膨胀通常共同使用,即由腐蚀消去小且无意义的物体,并通过膨胀增强图像的轮廓。这也是接下来要分享的开闭运算。

二、开闭运算

根据图像腐蚀和膨胀的先后顺序,将操作分为开运算与闭运算。

2.1 开运算实现与结果

先进行腐蚀操作,再进行膨胀操作,称为开运算,作用为去除小且无用的物体,并将图像轮廓进行增强,即平滑图像。

其实现代码如下所示:

opening=cv2.morphologyEx(pie,cv2.MORPH_OPEN,kernel)

cv2.morphologyEx() 函数具有三个参数

  • 要进行开运算的图像数据
  • 指定开运算指令格式
  • 指定卷积核大小,即通过 np.ones() 指定,详见系列2.

其结果图像如下图所示:
OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算_第2张图片

易知,先将小且无用的部分进行腐蚀,在将图形轮廓进行膨胀。

2.2 闭运算实现与结果

先进行膨胀操作,后进行腐蚀操作,称为闭运算,其作用为填充物体内的小空洞,连接邻近的物体和断开的轮廓线

实现代码如下:

closing=cv2.morphologyEx(pie,cv2.MORPH_CLOSE,kernel)

其格式与开运算相同,但是需将第二个参数修改为 cv2.MORPH_CLOSE

其结果图像如下所示:
OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算_第3张图片
易知,先将微小部分进行膨胀操作,再进行腐蚀操作。

三、梯度运算

3.1 梯度介绍

分别对图像进行腐蚀操作和膨胀操作,将膨胀操作的数据结果减去腐蚀操作的数据结果,所得到的数据结果即为梯度数据。从宏观图像分析,梯度数据所对应部分为被包围图像的边界。

3.2 梯度实现

实现代码如下所示:

gradient=cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)

与腐蚀、膨胀操作实现格式相同,但是要将第二个参数修改为: cv2.MORPH_GRADIEN

3.3 结果展示

OpenCV入门系列3:图像的膨胀、开闭运算和梯度运算_第4张图片

总结

本文分享了图像的膨胀操作、开闭运算和梯度运算,通过梯度运算的引入,接下来将逐渐进入图像边缘识别算法的进程。

你可能感兴趣的:(opencv,计算机视觉,人工智能)