cv2.findcontours
时间: 2023-07-24 18:58:35 浏览: 80
cv2.findcontours参数包括:
1. image:输入图像,必须为二值图像,即黑白图像。
2. mode:轮廓检索模式,有四种模式可选:
- cv2.RETR_EXTERNAL:只检索最外层轮廓。
- cv2.RETR_LIST:检索所有轮廓,不建立轮廓间的父子关系。
- cv2.RETR_CCOMP:检索所有轮廓,建立两层轮廓间的父子关系。
- cv2.RETR_TREE:检索所有轮廓,建立完整的轮廓层级结构。
3. method:轮廓逼近方法,有三种方法可选:
- cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
- cv2.CHAIN_APPROX_SIMPLE:仅存储轮廓的端点。
- cv2.CHAIN_APPROX_TC89_L1、cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chin链逼近算法。
4. contours:检测到的轮廓,每个轮廓由一组点组成。
5. hierarchy:轮廓的层级结构,每个轮廓对应一个四元组(hierarchy[i][], hierarchy[i][1], hierarchy[i][2], hierarchy[i][3]),其中hierarchy[i][]、hierarchy[i][1]、hierarchy[i][2]、hierarchy[i][3]分别表示当前轮廓的后一个轮廓、前一个轮廓、第一个子轮廓和父轮廓的索引。如果当前轮廓没有对应的后一个、前一个、子轮廓或父轮廓,则相应的索引值为-1。
相关问题
cv2.findContours返回什么
cv2.findContours() 是 OpenCV 中的一个函数,用于在二值图像中查找轮廓信息,它返回三个值,包括轮廓信息、层级信息以及近似轮廓线性信息。
其中,轮廓信息是一个由轮廓点坐标组成的列表,每个轮廓点坐标是一个长度为2的元组,表示该点在图像中的位置。层级信息用于描述轮廓之间的关系,每个轮廓都有一个层级关系,可以表示为一个长度为4的列表 [next, previous, child, parent],其中 next 表示下一个轮廓的索引,previous 表示上一个轮廓的索引,child 表示第一个子轮廓的索引,parent 表示父轮廓的索引。近似轮廓线性信息则是由轮廓点坐标经过抽样后形成的近似多边形轮廓线性信息。
如果您想深入了解 cv2.findContours() 函数及其参数和用法,可以参考 OpenCV 官方文档。
在opencvsharp中,Cv2.FindContours找到轮廓分割成一个一个线段
在OpenCVSharp中,`cv2.FindContours()` 函数用于从二进制图像中检测并提取轮廓。这个函数并不直接将图像分割成一个个线段;它实际上返回的是轮廓的轮廓点集合,每个轮廓表示物体边缘的一个连续路径。当你调用 `FindContours()` 后,你会得到一个轮廓数组(通常是`MatOfPoint`类型的),其中每个轮廓都是一个包含一系列点的序列,这些点连接起来形成一个封闭形状。
例如,你可以通过以下步骤使用 OpenCVSharp:
1. 转换灰度图并应用阈值处理,以便区分前景和背景。
2. 使用 `FindContours()` 获取轮廓信息。
3. 对于每个轮廓,遍历轮廓点,按照顺序连接它们形成线段。
这里是一个简单的示例代码片段:
```csharp
using Emgu.CV;
using Emgu.CV.Structure;
// ... (加载图像并转换为灰度)
var gray = new Image<Gray>(image);
var binary = threshold(gray); // 应用阈值处理
// Find contours
var contours = Cv2.FindContours(binary, RetrType.List, ContourApproximationMethod.ApproxSimple);
foreach (var contour in contours)
{
var approxContour = new Point[][] { contour };
var hull = ConvexHull(approxContour); // 获取凸包,近似线段
// 然后对hull中的每一对连续点绘制线段
for (int i = 0; i < hull.Length - 1; i++)
{
Cv2.Line(outputImage, hull[i], hull[i + 1], color, thickness);
}
}
```
阅读全文