OpenCV4入门系列教程83:图像连通组件分析(中心位置、外接矩形)

索引地址:系列教程索引地址

上一篇:OpenCV4入门系列教程82:图像轮廓发现

连接组件标记算法(connected component labeling algorithm)是图像分析中最常用的算法之一,算法的实质是扫描一幅图像的每个像素,对于像素值相同的分为相同的组(group),最终得到图像中所有的像素连通组件。扫描的方式可以是从上到下,从左到右,对于一幅有N个像素的图像来说,最大连通组件个数为N/2。扫描是基于每个像素单位,对于二值图像而言,连通组件集合可以是V={1|白色}或者V={0|黑色}, 取决于前景色与背景色的不同。对于灰度图像来说,连图组件像素集合可能是一系列在0 ~ 255之间k的灰度值。常见的连通组件标记算法非为两类

  • 基于无向图搜索递归算法
  • 基于无向图搜索与堆栈非递归算法
  • 两步法,基于扫描与等价类合并算法

OpenCV中支持连通组件扫描的API有两个,一个是带统计信息一个不带统计信息,不带统计信息的API及其解释如下:

1
2
3
4
5
6
int cv::connectedComponents(
InputArray image, // 输入二值图像,黑色背景
OutputArray labels, // 输出的标记图像,背景index=0
int connectivity = 8, // 连通域,默认是8连通
int ltype = CV_32S // 输出的labels类型,默认是CV_32S
)

带有统计信息的API及其解释如下:

1
2
3
4
5
6
7
8
9
int cv::connectedComponentsWithStats(
InputArray image, // 输入二值图像,黑色背景
OutputArray labels, // 输出的标记图像,背景index=0
OutputArray stats, // 统计信息,包括每个组件的位置、宽、高与面积
OutputArray centroids, // 每个组件的中心位置坐标cx, cy
int connectivity, // 寻找连通组件算法的连通域,默认是8连通
int ltype, // 输出的labels的Mat类型CV_32S
int ccltype // 连通组件算法
)

其中stats包括以下枚举类型数据信息:

  • CC_STAT_LEFT 组件的左上角点像素点坐标的X位置.
  • CC_STAT_TOP 组件的左上角点像素点坐标的Y位置.
  • CC_STAT_WIDTH 组件外接矩形的宽度
  • CC_STAT_HEIGHT 组件外接矩形的高度.
  • CC_STAT_AREA 当前连通组件的面积(像素单位)

下一篇:OpenCV4入门系列教程84:寻找最小包围矩形