cv::findcontours函数
时间: 2023-06-23 17:52:05 浏览: 114
cv::findContours是OpenCV中的一个函数,用于在二进制图像中检测轮廓。它将输入图像作为参数,并在其中查找所有物体的轮廓,返回一个向量,其中每个元素都是一个轮廓的点集。该函数的调用方式如下:
```
void cv::findContours(
InputOutputArray image,
OutputArrayOfArrays contours,
OutputArray hierarchy,
int mode,
int method,
Point offset = Point()
);
```
其中,image是输入的二进制图像,contours是输出的轮廓向量,hierarchy是可选的输出向量,用于指示轮廓之间的关系,mode和method是轮廓检测的模式和方法,offset是可选的偏移量。
相关问题
cv::findContours
cv::findContours函数是OpenCV中用于检测物体轮廓的函数。它可以通过简单几个步骤来检测出物体的轮廓,非常方便。该函数有几个参数,其中第四个参数是mode,用于定义轮廓的检索模式。mode的取值有四种:
1. CV_RETR_EXTERNAL:只检测最外围轮廓,忽略内围轮廓。
2. CV_RETR_LIST:检测所有轮廓,包括内围和外围轮廓,但不建立等级关系。
3. CV_RETR_CCOMP:检测所有轮廓,建立两个等级关系,外围为顶层,内围轮廓归属于顶层。
4. CV_RETR_TREE:检测所有轮廓,建立一个等级树结构,外层轮廓包含内层轮廓。
第五个参数是method,用于定义轮廓的近似方法。method的取值有三种:
1. CV_CHAIN_APPROX_NONE:保存物体边界上所有连续的轮廓点。
2. CV_CHAIN_APPROX_SIMPLE:仅保存轮廓的拐点信息,不保存直线段上的点。
3. CV_CHAIN_APPROX_TC89_L1和CV_CHAIN_APPROX_TC89_KCOS:使用teh-Chinl chain近似算法。
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向量中。最后,打印出轮廓的数量和每个轮廓的点数。
阅读全文