opencv 轮廓返回值
时间: 2024-07-14 16:01:27 浏览: 124
在OpenCV库中,轮廓(Contours)是处理图像二进制表示时的重要概念。当你对图像应用边缘检测算法(如Canny算子或阈值分割)后,轮廓函数`cv.findContours()`会查找并返回图像中的边界线或闭合区域。这个函数通常返回三个值:
1. **contours**: 主要的结果,是一个存储了所有轮廓的Mat矩阵,每个轮廓由一系列顶点(x,y坐标对)构成,按照轮廓的外部边界顺序排列。
2. **hierarchy**: 这个可选值包含了轮廓之间的层次信息,包括它们的关系,比如是否属于同一个物体的不同部分或者彼此相邻。它是一个嵌套的数组结构,包含四个级别的链接关系。
3. **ret**: 返回值,通常设置为0,表示操作成功;如果不是0,则可能有错误发生,需要检查具体错误码。
你可以遍历`contours`矩阵来获取每个轮廓的数据,并通过`hierarchy`来了解不同轮廓之间的层次关系。这对于形状分析、物体识别等计算机视觉任务非常有用。
相关问题
opencv approxPolyDP 返回值
在OpenCV库中,`approxPolyDP()` 函数是一个用于简化边界的函数,它通常用于二进制图像轮廓的处理。这个函数的基本原型如下:
```cpp
bool approxPolyDP(vector<Point>& contour, vector<Point>& result, double epsilon, bool closed=true);
```
参数含义如下:
1. `contour`:输入的多边形轮廓点,通常是通过`findContours()`函数获取的。
2. `result`:输出结果,即逼近后的边界点。
3. `epsilon`:指定允许的精度误差,表示原始轮廓和近似轮廓之间的最大距离比例。
4. `closed`:布尔值,如果设置为`true`,则假设轮廓是闭合的;如果不设置或设为`false`,则假设轮廓是开放的。
返回值:
`approxPolyDP()` 函数没有直接的返回值,而是直接修改了`result`参数。如果近似的点数小于3,说明轮廓可能是噪声或者是离散不好的边缘,函数会返回`false`。否则,如果成功近似,函数返回`true`。
opencv轮廓检测的返回值
OpenCV(Open Source Computer Vision Library)中的轮廓检测函数`cv2.findContours()`会返回一个轮廓列表(通常是元组),这个列表包含了一级或二级轮廓信息。返回值的具体结构取决于你传递给函数的参数和设置。
1. 如果使用`cv2.RETR_EXTERNAL`选项,并且`cv2.CHAIN_APPROX_SIMPLE`选项(默认),则函数返回一个轮廓列表(contours),每个轮廓是一个边界框数组(numpy数组),包含了轮廓的顶点坐标。
2. 如果设置了`cv2.RETR_LIST`,那么返回的是一个由轮廓组成的树形结构,每个元素都是一个轮廓列表,代表了轮廓之间的连接关系。
3. 对于`cv2.RETR_TREE`,它返回一个多级轮廓树,每个轮廓都是一棵树,其根节点是原图像的轮廓,其他节点是包围该轮廓的小轮廓。
4. 当`cv2.RETR_CCOMP`或`cv2.RETR_FLOODFILL`用于二分图时,返回值更复杂,包括两部分:外部轮廓列表和内部孔洞的轮廓列表。
无论哪种情况,第一个元素通常都是一个整数标志,表示是否找到了轮廓,如果不是0,说明有轮廓被找到。
阅读全文