opencv 获取所有子轮廓 c++ 代码
时间: 2023-09-10 15:05:16 浏览: 65
以下是使用OpenCV C++获取所有子轮廓的示例代码:
```
// 读取输入图像
Mat src = imread("input_image.jpg");
// 将输入图像转换为灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 对灰度图像进行二值化
Mat binary;
threshold(gray, binary, 0, 255, THRESH_BINARY);
// 查找轮廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
// 遍历每个轮廓
for (int i = 0; i < contours.size(); i++) {
// 如果当前轮廓有子轮廓
if (hierarchy[i][2] != -1) {
// 获取第一个子轮廓的索引
int childIndex = hierarchy[i][2];
// 遍历当前轮廓的所有子轮廓
while (childIndex != -1) {
// 获取当前子轮廓
vector<Point> childContour = contours[childIndex];
// 处理当前子轮廓
// 获取下一个子轮廓的索引
childIndex = hierarchy[childIndex][0];
}
}
}
```
在以上代码中,我们首先读取输入图像并将其转换为灰度图像。然后,我们对灰度图像进行二值化,并使用`findContours`函数查找所有轮廓。接下来,我们遍历每个轮廓,并检查它是否有子轮廓。如果有,我们遍历所有子轮廓,并对它们进行处理。
注意,在使用`findContours`函数时,我们指定了`RETR_TREE`标志以获取所有轮廓的层次结构。层次结构是一个包含每个轮廓的父轮廓、第一个子轮廓、下一个兄弟轮廓和轮廓的深度信息的向量。我们可以使用层次结构中的信息来获取每个轮廓的子轮廓。