qt OpenCV RETR_CCOMP 取底层
时间: 2023-07-13 07:04:37 浏览: 100
opencv 背景提取
在使用 OpenCV 的 RETR_CCOMP 模式时,您可以使用函数 cv::findContours() 来查找轮廓并获取每个轮廓的层次结构信息。该函数的第三个参数 hierarchy 是一个向量,它存储了每个轮廓的层次结构信息。每个元素都是一个四元组,其中包括轮廓的父轮廓、子轮廓、第一个内嵌轮廓以及下一个同级轮廓的索引。
下面是一个示例代码,演示如何使用 RETR_CCOMP 模式和 findContours() 函数来获取轮廓的底层信息:
```
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 转换为灰度图像
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 二值化
cv::Mat binary;
cv::threshold(gray, binary, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(binary, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_SIMPLE);
// 遍历每个轮廓
for (int i = 0; i < contours.size(); i++) {
// 如果该轮廓没有父轮廓,说明它是最外层的轮廓
if (hierarchy[i][3] == -1) {
// 处理底层轮廓
// ...
}
}
```
在上面的代码中,我们首先读取一张图像,并将其转换为灰度图像和二值图像。然后,我们使用 findContours() 函数查找轮廓,并将轮廓存储在 contours 向量中,层次结构信息存储在 hierarchy 向量中。最后,我们遍历每个轮廓,如果该轮廓没有父轮廓,说明它是最外层的轮廓,我们可以将其视为底层轮廓进行处理。
阅读全文