opencv findContours函数
时间: 2023-07-07 19:30:29 浏览: 97
OpenCV的`findContours`函数是用于在二值图像中查找轮廓的函数。它可以帮助我们提取出图像中的有意义的形状信息,例如物体轮廓和边缘。这个函数接受三个参数,分别是输入图像、轮廓检索模式和轮廓逼近方法。函数通过在二值图像中找到所有的轮廓,并将它们存储在向量中返回。
更具体的说,`findContours`函数的作用是将二值化图像中的对象轮廓检测出来,返回一个轮廓的向量。轮廓是一组连续的像素点的集合,可以表示图像中的任何形状。轮廓检索模式是指轮廓的检索方式,而轮廓逼近方法是指轮廓近似的方法。
例如,以下是使用`findContours`函数在一张图像中查找轮廓的示例代码:
```
Mat image = imread("example.png", 0);
Mat binary;
threshold(image, binary, 100, 255, THRESH_BINARY);
vector<vector<Point>> contours;
findContours(binary, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
```
其中,`imread`函数是用来读取图像的函数,`threshold`函数是用来将图像二值化的函数。`RETR_LIST`表示检索所有的轮廓,`CHAIN_APPROX_SIMPLE`表示使用简单逼近方法来计算轮廓。最后,函数会将所有轮廓存储在`contours`向量中返回。
相关问题
OpenCV 4.5.1 findContours函数
OpenCV 4.5.1版本中的`findContours()`函数是一个强大的功能,它主要用于在二进制或灰度图像中寻找轮廓(contours)。这个函数的主要目的是从图像中分离出物体的边缘,并返回一个表示轮廓的结构,通常是`std::vector<std::vector<cv::Point>`,其中每个内部的`cv::Point`数组代表一个轮廓上的一段连续路径。
`findContours()`函数接收一个图像作为输入,可以设置一些选项,如模式(`RETR_EXTERNAL`,`RETR_LIST`,`RETR_TREE`等),用于确定轮廓的详细程度和组织形式;还有厚度参数(`CHAIN_APPROX_SIMPLE`或`CHAIN_APPROX_NONE`)来控制轮廓近似的方式。
使用`findContours()`的基本步骤包括:
1. 转换图像为二值(如有需要)
2. 应用`findContours()`函数
3. 遍历找到的轮廓,分析它们的形状和位置
下面是一个基础的使用示例:
```cpp
cv::Mat img; // 加载或处理后的图像
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY); // 转为灰度
cv::threshold(gray, gray, 0, 255, cv::THRESH_BINARY_INV + cv::THRESH_OTSU); // 阈值化
std::vector<std::vector<cv::Point>> contours;
cv::findContours(gray, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
```
OpenCV中findcontours函数hierarchy
在OpenCV中,findContours函数的第三个参数hierarchy是一个可选的输出向量,用于指示轮廓之间的关系。hierarchy向量的每个元素是一个长度为4的整型数组,它包含了当前轮廓的下一级轮廓、前一级轮廓、父轮廓和内嵌轮廓的索引。具体来说,hierarchy向量的第i个元素hierarchy[i]的含义如下:
- hierarchy[i][0]:下一级轮廓的索引,如果没有下一级轮廓则为-1;
- hierarchy[i][1]:前一级轮廓的索引,如果没有前一级轮廓则为-1;
- hierarchy[i][2]:父轮廓的索引,如果没有父轮廓则为-1;
- hierarchy[i][3]:内嵌轮廓的索引,如果当前轮廓不是内嵌轮廓则为-1。
可以利用hierarchy向量来实现一些高级的轮廓操作,例如找到所有的轮廓、找到所有的子轮廓、找到所有的边缘轮廓等等。需要注意的是,使用hierarchy向量会增加计算的复杂度,因此如果不需要这些信息,可以将hierarchy参数设置为NULL。
阅读全文