【OpenCV 4开发详解】图像连通域分析

您所在的位置:网站首页 连通域分析统计连通域个数 【OpenCV 4开发详解】图像连通域分析

【OpenCV 4开发详解】图像连通域分析

2023-06-11 20:26| 来源: 网络整理| 查看: 265

表6-3 connectedComponents()函数中标记连通域算法类型可选择标志 标志参数 简记 作用 CCL_WU 0 8-邻域使用SAUF算法,4-邻域用SAUF算法 CCL_DEFAULT -1 8-邻域使用BBDT算法,4-邻域用SAUF算法 CCL_GRANA 1 8-邻域使用BBDT算法,4-邻域用SAUF算法

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

上述函数原型的所有参数都没有默认值,在调用时需要设置全部参数,增加了使用的复杂程度,因此OpenCV 4提供了connectedComponents()函数的简易原型,减少了参数数量以及为部分参数增加了默认值,简易原型在代码清单6-5中给出。

  代码清单6-5 connectedComponents()函数原型21.int cv::connectedComponents(InputArray  image,2.                            OutputArray  labels,3.                            int  connectivity = 8,4.                            int  ltype = CV_32S 5.                            ) image:待标记不同连通域的图像单通道,数据类型必须为CV_8U。 labels:标记不同连通域后的输出图像,与输入图像具有相同的尺寸。 connectivity:标记连通域时使用的邻域种类,4表示4-邻域,8表示8-邻域,默认参数为8。 ltype:输出图像的数据类型,目前支持CV_32S和CV_16U两种数据类型,默认参数为CV_32S。

该函数原型只有四个参数,前两个参数分别表示输入图像和输出图像,第三个参数表示统计连通域时选择的邻域种类,分别用4表示4-邻域,8表示8-邻域,参数的默认值为8。最后一个参数表示输出图像的数据类型,可以选择的参数为CV_32S和CV_16U两种,参数的默认值为CV_32S。该函数原型有两个参数具有默认值,在使用时最少只需要两个参数,极大的方便了函数的调用。

为了了解connectedComponents()函数使用方式,在代码清单6-6中给出利用connectedComponents()函数统计图像中连通域数目的示例程序。程序中首先将图像转换成灰度图像,然后将灰度图像二值化为二值图像,之后利用connectedComponents()函数对图像进行连通域的统计。根据统计结果,将数字不同的标签设置成不同的颜色,以区分不同的连通域,程序运行的结果如图6-9所示。

  代码清单6-6 myConnectedComponents.cpp图像连通域计算1.#include 2.#include 3.#include 4.5.using namespace cv;6.using namespace std;7.8.int main()9.{10. //对图像进行距离变换11. Mat img = imread("rice.png");12. if (img.empty())13. {14. cout 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3