cv::findcontours函数
时间: 2023-06-23 22:52:05 浏览: 73
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是可选的偏移量。
相关问题
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是OpenCV中的一个函数,用于在二值图像中查找轮廓。以下是一个使用cv::findContours函数的例子:
```c++
cv::Mat binaryImage; // 二值图像
std::vector<std::vector<cv::Point>> contours; // 存储轮廓的向量
std::vector<cv::Vec4i> hierarchy; // 存储轮廓的层次结构的向量
// 查找轮廓
cv::findContours(binaryImage, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
// 绘制轮廓
cv::Mat contourImage(binaryImage.size(), CV_8UC3, cv::Scalar(0, 0, 0)); // 创建一个黑色图像
for (int i = 0; i < contours.size(); i++) {
cv::drawContours(contourImage, contours, i, cv::Scalar(0, 0, 255), 2, 8, hierarchy, 0);
}
// 显示结果
cv::imshow("Contours", contourImage);
cv::waitKey(0);
```
在这个例子中,我们首先定义了一个二值图像和两个向量,然后调用cv::findContours函数查找轮廓。函数的第一个参数是二值图像,第二个参数是存储轮廓的向量,第三个参数是存储轮廓的层次结构的向量。函数的第四个和第五个参数分别指定轮廓的检索模式和近似方法。在这个例子中,我们使用了cv::RETR_TREE和cv::CHAIN_APPROX_SIMPLE两个参数。最后,我们使用cv::drawContours函数绘制轮廓,并显示结果。
希望这个例子能够帮助你理解cv::findContours函数的使用。