opencv连通域

opencv连通域学习

  • 连通域

连通域

图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找彼此相互独立的连通域并将其标记出来。提取图像中不同的连通域是图像中较为常用的方法。例如在车牌识别、文字识别、目标检测等领域对感兴趣区域分割与识别。一般情况下,一个连通域内只包含一个像素值,因此为了防止像素值波动对提取不同连通域的影响,连通域分析常处理的是二值化后的图像。

图像中两个像素相邻有两种定义方式,分别是4-领域和8-领域。根据两个像素相邻的定义方式不同,得到的连通域也不相同,因此在分析连通域的同时,一定要声明是在哪种领域条件下分析得到的结果。
opencv连通域_第1张图片

常用的图像领域分析法有两遍扫描法和种子填充法。两遍扫描法会遍历两次图像,第一次遍历图像时会给每个非0像素赋予一个数字标签,当某个像素的上方和左侧领域内的像素已经有数字标签时,取两者中的最小值作为当前像素的标签,否则赋予当前像素一个新的数字标签。第一次遍历图像的时候同一个连通域可能会被赋予一个或者多个不同的标签,如下图所示,因此第二次遍历需要将这些属于同一个连通域的不同标签合并,最后实现同一个领域内的所有像素具有相同的标签。
opencv连通域_第2张图片
种子填充法源于计算机图像学,常用于对某些图形进行填充。该方法首先将所有非0像素放到一个集合中,之后在集合中随机选出一个像素作为种子像素,根据领域关系不断扩充种子像素所在的连通域,并在集合中删除掉扩充出的像素,直到种子像素所在的连通域无法扩充,之后再从集合中随机选取一个像素作为新的种子像素,重复上述过程直到集合中没有像素。

opencv4提供了用于提取图像中不同连通域的connectedComponents()函数,该函数用于计算二值图像中连通域的个数,并在图像中将不同的连通域用不同的数字标签标记出来,其中标签0表示图像中的背景区域,同时函数具有一个int类型的返回数据,用于表示图像中连通域的数目。函数的第一个参数时待标记连通域的输入图像,函数要求输入图像必须是数据类型为CV_8U的单通道灰度图像,而且最好是经过二值化的二值图像。函数第二个参数是标记连通域后的输出图像,图像尺寸与第一个参数的输入图像尺寸相同,图像的数据类型与函数的第四个参数相关。函数第三个参数是统计连通域时选择的领域种类,函数支持两种领域,分别用4表示4-领域,8表示8-领域。函数第四个参数为输出图像的数据类型,可以选择的参数为CV_32和CV_16U两种。函数的最后一个参数时标记连通域时使用算法的标志,目前只支持Grana(BBDT)和Wu(SAUF)两种算法。

上述函数原型的所有参数都没有默认值,在调用时需要设置全部参数,增加了使用的复杂程度,因此opencv4提供了connectedComponents()函数的简易原型,减少了参数数量以及部分参数增加了默认。

你可能感兴趣的:(机器学习)