qt OpenCV RETR_CCOMP 去除一层
时间: 2023-07-13 12:04:37 浏览: 37
在 OpenCV 中,`RETR_CCOMP` 是一种轮廓检测模式,它会检测所有轮廓并将其分层组织,每个轮廓只有两种可能的层次结构:它是外部轮廓,或者它在另一个轮廓内。
如果您想要去除一层轮廓,可以通过遍历所有轮廓并将其与其父轮廓进行比较来实现。如果轮廓的父轮廓是另一个轮廓,则将其从轮廓列表中删除即可。
以下是示例代码:
```cpp
// contours 是所有轮廓的向量
// hierarchy 是轮廓的层次结构向量
// 遍历所有轮廓
for (int i = 0; i < contours.size(); i++) {
// 如果当前轮廓有父轮廓
if (hierarchy[i][3] != -1) {
// 找到当前轮廓的父轮廓
int parent_idx = hierarchy[i][3];
// 如果父轮廓也是一个轮廓(即不是外部轮廓)
if (hierarchy[parent_idx][3] != -1) {
// 将当前轮廓从列表中删除
contours.erase(contours.begin() + i);
// 更新轮廓层次结构
hierarchy.erase(hierarchy.begin() + i);
// 减少索引以保持一致性
i--;
}
}
}
```
请注意,这只会删除最外层的轮廓,如果要删除其他层级的轮廓,可以根据需要进行修改。