cv2.findContours
时间: 2023-11-11 19:50:18 浏览: 17
cv2.findContours是一个OpenCV库中的函数,用于在二进制图像中查找轮廓。它接受一个二进制图像(通常是阈值化或Canny边缘检测后的图像)并返回一个轮廓列表和它们的层次结构。这个函数有三个参数:输入图像、轮廓检索模式和轮廓近似方法。输入图像应该是一个8位单通道图像。轮廓检索模式指定如何检索轮廓,通常设置为cv2.RETR_EXTERNAL以仅检测外部轮廓。轮廓近似方法指定如何近似轮廓,通常设置为cv2.CHAIN_APPROX_SIMPLE以仅保留轮廓的端点。
相关问题
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);
}
}
```
阅读全文