oepncv c++ 连通组件扫描
创始人
2024-03-14 19:52:52
0

1、概念

        连通组件指在图像上通过四邻域八邻域法,连接起来的像素值大于某一阈值的区域(这些像素点被称为前景像素),而小于阈值的区域被称为背景。如下图的4个连通组件。

         四邻域、八邻域:

 

2、常用算法

a)基于像素的扫描方法                                      b)基于块的扫描方法

 说明:与卷积类似,利用上述模板在图像上平移扫描前景像素,则扫描区域内其余的前景像素与当前像素连通。

 c)两步法扫描

        1、同样采用像素模板对图像进行扫描,给予其标记,并获得等价队列(连通的不同标记队列)。

        

         2、将一个等价队列中的标记全部置为最小标记值,如上{1,3,5}队列全置为1。

        

d)opencv中的连通组件扫描算法——BBDT

c_{1}true判定:

        将上图左边的块模板分为右边所示的大块分区P、Q、R、S、X。要获取块X与块P连通的结论(c_{1}),则需满足,小像素点h和o均为前景像素。

3、代码示例:

3.1、 API:


int cv::connectedComponents	(	InputArray 	image,OutputArray 	labels,int 	connectivity,int 	ltype,int 	ccltype )	

int cv::connectedComponentsWithStats(	InputArray 	image,OutputArray 	labels,OutputArray 	stats,OutputArray 	centroids,int 	connectivity,int 	ltype,int 	ccltype )	

labels——带标记的与输入图像同大小类型的图像。 

stats——每个连通组件的(包括背景)的外接矩形信息,具体如下:

 centroids——每个连通组件的(包括背景)的中心坐标信息,数据类型为CV_64F

connectivity——邻域连通方法,4/8邻域。

ltype——输出label图像类型,目前仅有CV_32S 和CV_16U类型可选用。

ccltype ——连通组件扫描方法,可选用如下方法:

 connectedComponents 示例:

void QuickDemo::scan_neighbor(Mat& image)
{//高斯模糊GaussianBlur(image, image, Size(3, 3), 0);Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);Mat binary;threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);namedWindow("adaptiveThreshold", WINDOW_FREERATIO);imshow("adaptiveThreshold", binary);Mat labels = Mat::zeros(binary.size(), binary.type());int num_label = connectedComponents(binary, labels, 8, CV_32S, CCL_DEFAULT);//显示labels//1、生成颜色数组RNG rng(12345);vector colorTable(num_label);//定义一个num_label维度的空数组colorTable[0] = Vec3b(0, 0, 0);//将背景颜色置为黑色for (int i = 1; i < num_label; ++i) {//对其余标签赋予颜色数据colorTable[i] = Vec3b(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));}Mat result = Mat::zeros(image.size(), image.type());//2、通过循环对不同的标签填入随机生成的颜色int h = image.rows, w = image.cols;for (int row = 0; row < h; ++row) {for (int col= 0; col < w; ++col) {int label = labels.at(row, col);//将labels图像上对应像素坐标上的标记值取出result.at(row, col) = colorTable[label];//将result图像上对应像素坐标赋予颜色}}//在图像上显示有多少个字体putText(result, format("number of %d", num_label - 1), Point(50, 50), FONT_HERSHEY_PLAIN, 3, Scalar(0, 50, 70), 1);namedWindow("labels", WINDOW_FREERATIO);imshow("labels", result);
}

connectedComponentsWithStats示例:

void QuickDemo::scan_neighbor(Mat& image)
{//高斯模糊GaussianBlur(image, image, Size(3, 3), 0);Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);Mat binary;threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);namedWindow("adaptiveThreshold", WINDOW_FREERATIO);imshow("adaptiveThreshold", binary);Mat labels = Mat::zeros(binary.size(), binary.type());Mat stats, centroids;int num_label = connectedComponentsWithStats(binary, labels,stats,centroids, 8, CV_32S, CCL_DEFAULT);//显示labels//1、生成颜色数组RNG rng(12345);vector colorTable(num_label);//定义一个num_label维度的空数组colorTable[0] = Vec3b(0, 0, 0);//将背景颜色置为黑色for (int i = 1; i < num_label; ++i) {//对其余标签赋予颜色数据colorTable[i] = Vec3b(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));}Mat result = Mat::zeros(image.size(), image.type());//2、通过循环对不同的标签填入随机生成的颜色int h = image.rows, w = image.cols;for (int row = 0; row < h; ++row) {for (int col = 0; col < w; ++col) {int label = labels.at(row, col);//将labels图像上对应像素坐标上的标记值取出result.at(row, col) = colorTable[label];//将result图像上对应像素坐标赋予颜色}}//绘制外接矩形和中心点圆for (int i = 1; i < num_label; ++i) {//先获取连接组件的中心坐标int cx = centroids.at(i, 0);int cy = centroids.at(i, 1);int x = stats.at(i, CC_STAT_LEFT);//矩形左边界与整个图像左边的距离int y = stats.at(i, CC_STAT_TOP);//矩形上边界与整个图像上边的距离int width = stats.at(i, CC_STAT_WIDTH);//矩形宽度int height = stats.at(i, CC_STAT_HEIGHT);//矩形高度int area = stats.at(i, CC_STAT_AREA);//矩形面积//绘制circle(result, Point(cx, cy), 3, Scalar(0, 0, 255), 2, 8);// 外接矩形Rect box(x, y, width, height);rectangle(result, box, Scalar(0, 255, 0), 2, 8);putText(result, format("%d", area), Point(x, y), FONT_HERSHEY_PLAIN, 3, Scalar(0, 50, 70), 1);}namedWindow("labels", WINDOW_FREERATIO);imshow("labels", result);
}

 

 

相关内容

热门资讯

轻纺城:3.71亿元房屋征收补... 12月25日,轻纺城(600790)发布公告,2022年6月,公司子公司国际物流中心与房屋征收部门签...
诉讼未决,海辰储能赴港IPO前... 储能类公司赴港IPO难不难?对果下科技而言,不难——更新招股书后便很快登陆港股市场。对海辰储能而言,...
江丰电子:分红政策详见未来三年... 证券之星消息,江丰电子(300666)12月25日在投资者关系平台上答复投资者关心的问题。 投资者提...
深度关注丨促进"四项... 安徽省亳州市健全“纪巡”联动机制,该市市委巡察机构将发现的生态环境保护方面问题线索及时移交市纪委监委...
上海出台23条政策措施 支持长... 近日,上海市科委会同松江区研究制订了《关于支持长三角G60科创走廊策源地建设的若干措施》。《若干措施...
藏格矿业:发布对外投资管理制度 藏格矿业公告称,公司制定对外投资管理制度,规范对外投资行为,明确对外投资需遵循合法合规、符合发展战略...
一审败诉!海峡创新因担保卷入房... 12月25日晚间,海峡创新(300300)发布公告,公司收到浙江省杭州市拱墅区人民法院送达的民事判决...
形势政策系列报告会第三场报告会... 新华社北京12月25日电 由中央宣传部、中央和国家机关工委、教育部、中央军委政治工作部、北京市委联合...
以考提质 以答践责——长春市宽... 12月23日,长春市宽城区举行2025年度领导干部法律知识考试,28名新提拔处级领导干部和31名新提...