cv::findContours();得到子轮廓
时间: 2024-03-07 19:45:00 浏览: 20
cv::findContours() 是 OpenCV 库中的一个函数,用于在二值图像中查找轮廓。它可以帮助我们找到图像中的所有轮廓,并将其存储为一个轮廓向量。
使用 cv::findContours() 函数可以得到子轮廓的步骤如下:
1. 首先,需要创建一个二值图像,可以通过阈值化、边缘检测等方法得到。
2. 然后,创建一个空的轮廓向量,用于存储找到的轮廓。
3. 调用 cv::findContours() 函数,传入二值图像和轮廓向量作为参数。
4. 在函数调用后,轮廓向量将被填充上找到的轮廓信息。
5. 可以通过遍历轮廓向量来访问每个子轮廓的信息。
以下是一个示例代码,展示了如何使用 cv::findContours() 函数来获取子轮廓:
```cpp
cv::Mat binaryImage; // 二值图像
std::vector<std::vector<cv::Point>> contours; // 轮廓向量
// 阈值化或边缘检测等操作得到二值图像
cv::findContours(binaryImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 遍历轮廓向量,访问每个子轮廓的信息
for (int i = 0; i < contours.size(); i++) {
std::vector<cv::Point> contour = contours[i];
// 处理子轮廓的代码
}
```
相关问题
cv::findContours 查找 圆圈的两个轮廓
首先需要明确的是,圆形只有一个轮廓,因为它没有内部空洞。如果您是想查找圆形的边界,可以使用cv::findContours函数。以下是一个示例代码:
```c++
cv::Mat img; // 二值化图像
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(img, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 遍历轮廓
for (int i = 0; i < contours.size(); i++) {
double area = cv::contourArea(contours[i]);
// 如果轮廓面积太小,则跳过
if (area < 100) continue;
// 计算轮廓的最小外接圆
cv::Point2f center;
float radius;
cv::minEnclosingCircle(contours[i], center, radius);
// 绘制圆形
cv::circle(img, center, radius, cv::Scalar(255, 255, 255), 2);
}
```
注意,上述代码仅适用于查找单个圆形的情况,如果图像中有多个圆形,则需要对每个圆形的轮廓进行处理。
OpenCV cv::findContours
OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。其中,cv::findContours是OpenCV中的一个函数,用于在二值图像中查找轮廓。
cv::findContours函数的基本语法如下:
```
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point())
```
参数说明:
- image:输入的二值图像,通常为灰度图像或二值化后的图像。
- contours:输出的轮廓,每个轮廓由一系列点组成。
- hierarchy:输出的轮廓层级信息,用于描述轮廓之间的关系。
- mode:轮廓检索模式,指定轮廓的检索方式。
- method:轮廓近似方法,指定轮廓的近似方式。
- offset:可选参数,指定轮廓点坐标的偏移量。
cv::findContours函数会根据指定的模式和方法,在输入的二值图像中查找轮廓,并将结果存储在contours和hierarchy中。每个轮廓由一系列点组成,可以通过contours获取每个轮廓的点集。hierarchy用于描述轮廓之间的关系,例如父子关系、兄弟关系等。