#define MAXLABEL 500
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
uchar parent[MAXLABEL] = { 0 };//通过while循环查找根节点,因为标签为根节点时parent存放的值是0
int Find(uchar x, uchar parent[])
{int i = x;while (0 != parent[i])i = parent[i];return i;
}//通过while循环找到i,j的根节点,在判断根节点是否一致,不一致,将值小的作为父节点,将关系存储到parent数组里面
void Union(uchar big, uchar small, uchar parent[])
{uchar i = big;uchar j = small;while (0 != parent[i])i = parent[i];while (0 != parent[j])j = parent[j];if (i != j)parent[i] = j;
}Mat Label(Mat &I)
{/// first passint label = 0;Mat dst = Mat::zeros(I.size(), I.type());for (int nY = 0; nY < I.rows; nY++){for (int nX = 0; nX < I.cols;nX++){if (I.at<uchar>(nY, nX) != 0){uchar left = nX - 1<0 ? 0 : dst.at<uchar>(nY, nX - 1);//边界点注意uchar up = nY - 1<0 ? 0 : dst.at<uchar>(nY - 1, nX);if (left != 0 || up != 0){if (left != 0 && up != 0){dst.at<uchar>(nY, nX) = min(left, up);if (left < up)Union(up, left, parent);else if (up<left)Union(left, up, parent);}elsedst.at<uchar>(nY, nX) = max(left, up);}else{dst.at<uchar>(nY, nX) = ++label;}}}}/// second pass for (int nY = 0; nY < I.rows; nY++){for (int nX = 0; nX < I.cols; nX++){if (I.at<uchar>(nY, nX) == 1)dst.at<uchar>(nY, nX) = Find(dst.at<uchar>(nY, nX), parent);}}return dst;
}
int main()
{Mat image = imread("d:/zimu.png",1);Mat gray,thresh;cvtColor(image,gray,CV_RGB2GRAY);threshold(gray,thresh,40,1,THRESH_BINARY_INV);imshow("erzhi", thresh);Mat result = Label(thresh);namedWindow("结果",0);imshow("结果",result);waitKey();return 0;
}

参考:https://blog.csdn.net/icvpr/article/details/10259577

OpenCV_连通区域分析----Two-Pass法相关推荐

  1. opencv笔记(十八)——连通区域分析

    本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法--连通性分析法(连通区域标记法).文中介绍了两种常见的连通性分析的算法:1)Two-pass:2)Seed-Fill ...

  2. OpenCV二值图像处理——阈值,连通区域分析(C++)

    阈值 阈值又叫临界值,是指一个效应能够产生的最低值或最高值 对于图像的直方图存在明显边界的图像,我们可以很容易找到这个阈值,但是如果图像直方图分界不明显,那么这个阈值的寻找将变得十分困难.因此我们存在 ...

  3. OpenCV与图像处理学习九——连通区域分析算法(含代码)

    OpenCV与图像处理学习九--连通区域分析算法(含代码) 一.连通区域概要 二.Two-Pass算法 三.代码实现 一.连通区域概要 连通区域(Connected Component)一般是指图像中 ...

  4. opencv(十三)-快速连通区域分析

    索引目录 1.连通区域标记算法 2.剔除小连通区域 参考 1.连通区域标记算法 连接区域标记算法(connected component labeling algorithm)是图像分析中最常用的算法 ...

  5. OpenCv连通区域分析——Two-Pass 算法区域生长算法

    连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域.连通区域分析是指将图像中的各个连通区域找出并标记,通常连通区域分析处理的对象是一张二 ...

  6. VTK修炼之道51:图形基本操作进阶_连通区域分析

    1.连通区域分析 许多图形数据中,并非只包含一个对象(连通区域).而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示.比如,利用MarchingCube方法提取三维图像中的等值面,得 ...

  7. c++连通区域处理 种子生成法

    OpenCV_连通区域分析(Connected Component Analysis-Labeling) OpenCV_连通区域分析(Connected Component Analysis/Labe ...

  8. 深度学习,分割后处理之通过连通成分分析去除假阳性区域,提高分割准确度

    用深度学习方法得到的分割结果,会有一些假阳性区域.通过去除这些假阳性区域,可以提高分割结果. 比如说做肾分割,大家都知道,肾只有左右两边有,如果分割结果出现了三个区域,则可以根据常识,去除那个假阳性区 ...

  9. 【机器视觉学习笔记】二值图像连通区域提取算法(C++)

    目录 原理 二值图像 连通区域(Connected Component) 连通区域分析(Connected Component Analysis,Connected Component Labelin ...

  10. python 连通区域_python skimage 连通性区域检测方法

    python skimage 连通性区域检测方法 涉及到的函数为 import matplotlib.pyplot as plt from skimage import measure, color ...

最新文章

  1. ubuntu 命令行下查看网页 w3m
  2. Bmp格式与编程读取解析
  3. Android下利用Bitmap切割图片
  4. python模型保存save_浅谈keras保存模型中的save()和save_weights()区别
  5. Innodb之监控Buffer pool Load progress
  6. MySQL架构设计相关的方式方法和软件介绍
  7. @程序员,不会 Debug 还做什么开发?
  8. NIO-ByteBuffer
  9. rsync数据同步工具
  10. LabVIEW前面板数值控件显示7段LED数码管样式
  11. 2022年煤矿安全监测监控特种作业证考试题库模拟考试平台操作
  12. 百度富文本ueditor实现导入word并将内容显示到编辑器中
  13. 什么是面向接口编程?
  14. Tom猫爱吃喝_Python面向对象“又“入门
  15. 一小时建立数据分析平台
  16. 逐鹿战神--ios技术支持
  17. java media player 设置音量_SoundPlayer可调音量 - c#
  18. 浙江省计算机高级教程,2019年9月浙江省计算机二级教程:MS Office高级应用上机指导...
  19. python高分书籍推荐_如果只能推荐一本 Python 书,我一定 Pick 它
  20. Android开发百度地图指南针消失问题

热门文章

  1. 还原二叉树--根据后序中序输出先序
  2. (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
  3. CSS中min-height:100%问题
  4. Dojo学习2 dojo快速安装
  5. BZOJ 1677. [Usaco2005 Jan]Sumsets 求和
  6. day6 字典的介绍
  7. java的几个概念AOP、IOC、DI、DIP、工厂模式、IOC容器
  8. 队列 句子分析 精辟的诠释 有图片
  9. [原创] 若水新闻安卓客户端开发教程笔记
  10. ubuntu 运行级别initlevel