opencv 连通区域计算,图像连通域计算
这篇文章主要为大家介绍了开放计算机视觉连通域数量统计示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
目录
学习目标:核心代码代码执行说明
学习目标:
1.输入图像为分割结果图像
2.根据种子填充法思路,遍历图像,得到每个连通域外接矩形坐标信息、面积信息
核心代码
/*
输入:
src:待检测连通域的二值化图像
输出:
dst:标记后的图像
羽毛状:连通域特征的清单(可自行查阅文档)
返回:
连通域数量。
*/
内部连接检测(Mat src,Mat dst,vectorFeather featherList)
{
int rows=src.rows
int cols=src.cols
int标签值=0;
点种子,邻居;
堆栈点点堆栈
//用于计算连通域的面积
int area=0;
//连通域的左边界,即外接最小矩形的左边框,横坐标值,依此类推
int左边界=0;
int右边界=0;
int top boundary=0;
int bottom boundary=0;
//外接矩形框
矩形盒;
羽毛羽毛;
向量堆栈点;
羽毛清单。clear();
夏令时。发布();
dst=src。clone();
for(int I=0;英语字母表中第九个字母行;我)
{
uchar * pRow=dst。普图查尔(一);
for(int j=0;科尔斯基)
{
if (pRow[j]==255)
{
面积=0;
//labelValue最大为254,最小为1.
标签值
//点(横坐标,纵坐标)
seed=Point(j,I);
夏令时。atuchar(seed)=标签值;
pointStack.push(种子);
面积;
leftBoundary=seed.x
rightBoundary=seed.x
topBoundary=seed.y
bottomBoundary=seed.y
而(!pointStack.empty())
{
邻居=点(seed.x 1,种子。y);
如果((seed.x!=(cols-1))(dst。atuchar(邻居)==255)
{
夏令时。atuchar(neighbor)=标签值;
pointStack.push(邻居);
面积;
if (rightBoundary neighbor.x)
rightBoundary=neighbor.x
}
邻居=点(seed.x,seed。y 1);
如果((seed.y!=(rows-1))(dst。atu char(邻居)==255)
{
夏令时。atuchar(neighbor)=标签值;
pointStack.push(邻居);
面积;
if (bottomBoundary neighbor.y)
bottomBoundary=neighbor.y
}
邻居=点(seed.x - 1,seed。y);
如果((seed.x!=0) (dst.atuchar(neighbor)==255)
{
夏令时。atuchar(neighbor)=标签值;
pointStack.push(邻居);
面积;
if (leftBoundary neighbor.x)
leftBoundary=neighbor.x
}
邻居=点(seed.x,seed。y-1);
如果((seed.y!=0) (dst.atuchar(neighbor)==255)
{
夏令时。atuchar(neighbor)=标签值;
pointStack.push(邻居);
面积;
if (topBoundary neighbor.y)
topBoundary=neighbor.y
}
种子=点堆栈。top();
点堆栈。pop();
}
box=Rect(左边界,上边界,右边界-左边界,下边界-上边界);
羽毛面积=面积
feather.boundingbox=box
feather.label=标签值
featherList.push_back(羽毛);
}
}
}
返回标签值
}
代码执行说明
font color=#999AAA在此不进行实例演示
1、 输入图像为分割后图像
2、 执行结果可根据羽毛清单信息自行绘制矩形框
hr style= border:solid宽度 width :100 px height :1 px color=# 000000 size=1
以上就是开放计算机视觉连通域数量统计学习示例的详细内容,更多关于开放计算机视觉连通域数量统计的资料请关注盛行信息技术软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。