vector<Vec4i> hierarchy;
时间: 2024-06-02 16:04:05 浏览: 110
vector<Vec4i> hierarchy是一个存储了四个整数的向量容器,通常用于表示图像中的轮廓层级关系。在OpenCV中,轮廓是由一系列连续的点组成的闭合曲线,而轮廓层级关系则描述了轮廓之间的父子关系。
具体来说,vector<Vec4i> hierarchy的每个元素都是一个包含四个整数的向量,表示一个轮廓的层级关系。这四个整数分别表示轮廓的下一个轮廓、前一个轮廓、第一个子轮廓和父轮廓。如果某个轮廓没有下一个、前一个、子轮廓或父轮廓,则对应的整数值为-1。
通过使用hierarchy向量,我们可以遍历和操作图像中的轮廓,并根据层级关系进行相应的处理,例如找到所有的父轮廓、子轮廓或者根据层级关系进行轮廓的筛选等。
相关问题
vector<vector<Point>> contours; vector<Vec4i> hierarchy;定义不完整
这段代码定义了两个变量contours和hierarchy,它们的数据类型分别是vector<vector<Point>>和vector<Vec4i>。
vector<vector<Point>>是一个二维向量,其中每个元素是一个Point类型的向量。通常用来存储轮廓点的坐标信息。
vector<Vec4i>是一个一维向量,其中每个元素是一个四维整型向量。通常用来存储轮廓之间的关系,如轮廓的父子关系等。
但是,这段代码定义的时候缺少了变量名,所以代码是不完整的。正确的定义应该是类似于这样的:
```
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
```
其中,contours和hierarchy是变量名,可以根据实际需要自行命名。
//轮廓发现与绘制 vector<vector<Point>> contours; vector<Vec4i> hierarchy; Vec4f line0, line1, line2, line3, line4, line5, line6, line7, line8, line9, line10, line11, line12, line13, line14, line15, line16, line17, line18, line19; findContours(edge, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point()); //绘制轮廓 for (int t = 0; t < hierarchy.size(); t++) { drawContours(edge, contours, t, Scalar(255, 255, 255), 1, 4); //printf("%d", t); } int m0, n0; for (m0 = 0; m0 < contours.size(); m0++) { for (n0 = 0; n0 < contours[m0].size(); n0++) cout << contours[m0][n0] << ""; cout << "\n"; }
这段代码是用于轮廓发现与绘制的。首先,调用`findContours()`函数对二值化图像`edge`进行轮廓发现,得到所有轮廓的坐标信息存储在`contours`向量中,同时每个轮廓的层级信息存储在`hierarchy`中。接着,使用`drawContours()`函数对每个轮廓进行绘制,这里使用白色线条绘制。最后,通过两层循环遍历`contours`向量中的每个轮廓,输出其中所有点的坐标信息。
阅读全文