cv::findContours
时间: 2023-08-19 13:15:36 浏览: 46
cv::findContours是OpenCV库中的一个函数,用于在图像中查找轮廓。它的原型有多个重载形式,但基本的参数和功能是相同的。该函数接受一个输入图像、一个输出的轮廓向量、一个可选的拓扑信息、一个轮廓检索模式和一个近似方法作为参数。它会在输入图像中找到所有的轮廓,并将它们存储在输出的轮廓向量中。轮廓是由一系列的点组成的闭合曲线,表示了图像中的边界或物体的形状。在使用cv::findContours函数之前,通常需要对输入图像进行预处理,例如将其转换为二值图像。然后,可以使用cv::drawContours函数将轮廓绘制在图像上,以便进行可视化或进一步的处理。
相关问题
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用于描述轮廓之间的关系,例如父子关系、兄弟关系等。
cv::findContours输出
cv::findContours函数的输出参数是一个包含所有轮廓的向量(vector),每个轮廓都表示为一个点集。这个输出参数通常是一个名为`contours`的变量,可以是一个向量的向量(`std::vector<std::vector<cv::Point>> contours`)或者一个简单的向量(`std::vector<cv::Point> contours`)。
如果使用向量的向量来存储轮廓,那么每个内部向量表示一个单独的轮廓。每个轮廓由一系列点组成,每个点都表示为`cv::Point`类型。如果使用简单的向量来存储轮廓,那么所有的轮廓点都被连续存储在同一个向量中。
以下是一个示例代码片段,演示如何使用cv::findContours函数并输出轮廓:
```cpp
cv::Mat image; // 输入图像
cv::Mat binaryImage; // 二值化后的图像
std::vector<std::vector<cv::Point>> contours; // 存储轮廓的向量
// 对输入图像进行二值化处理,将结果保存在binaryImage中
cv::threshold(image, binaryImage, 128, 255, cv::THRESH_BINARY);
// 查找二值化图像中的轮廓
cv::findContours(binaryImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 输出轮廓的数量
std::cout << "Number of contours: " << contours.size() << std::endl;
// 遍历所有轮廓
for (size_t i = 0; i < contours.size(); i++) {
// 输出每个轮廓的点数
std::cout << "Contour " << i << " size: " << contours[i].size() << std::endl;
}
```
上述代码首先对输入图像进行二值化处理,然后使用cv::findContours函数查找轮廓,并将结果存储在contours向量中。最后,打印出轮廓的数量和每个轮廓的点数。