opencv 删除二值图中小面积连通区域(matlab的regionprops)

背景
我在matlab中用了 regionprops来统计二值图的连通区域的性质, 并删除小面积的二值图区域. 在opencv中找了好久, 有说用第三方库的cvblob,感觉配置起来好麻烦. 最终发现opencv(3.1)有个类似功能的函数;connectedComponentsWithStats
(不知道这个函数所在的最低版本是多少)


两个相关函数

connectedComponents与connectedComponentsWithStats. 前者是后者的简化版本,这里只介绍后者, 也就是connectedComponentsWithStats

int cv::connectedComponentsWithStats    (   InputArray  image,
OutputArray     labels,
OutputArray     stats,
OutputArray     centroids,
int     connectivity = 8,
int     ltype = CV_32S 
)   

参数说明

InputArray image 输入图, 8UC1类型的图
OutputArray labels label图, 针对不同的连通区域给与不同的标签
OutputArray stats 对各个连通区域的统计信息(这个变量会是CV_32S类型)
OutputArray centroids 每个连通区域的中心(这个我不清楚它的计算公式是什么, 行,列均值?)数据类型是CV_64F.
int connectivity 连通区域的类型 8连通或者4连通
int ltype label的数据类型CV_32S 或者CV_16U

注意要点

stats返回的是一个n × 5 的矩阵:
1st 列~ 4th 列分别是: 此连通区域的外接矩形的: 左上角点的x坐标, y坐标, 宽, 高, ;
2nd 列是 连通区域的面积.
也就是此函数不描述连通区域的精确位置, 只描述外接矩形的位置, 与regionprops略有不同.

stats所返回的连通区域中也包含背景本身这一连通区域例子如下:

0 0 0 0 0 0
0 0 1 1 0 0
0 0 1 1 0 0
0 0 0 0 0 0

针对以上连通区域, stats返回一个 2 ×5的矩阵, 第一行统计的是背景(0)这一连通区域, 第二行才是中间4个1这一连通区域

猜你喜欢

转载自blog.csdn.net/qq_29007291/article/details/80081188