cv2.findContours()
时间: 2023-06-21 15:15:30 浏览: 72
cv2.findContours() 是 OpenCV 中用于查找图像中连通对象(例如物体轮廓)的函数。它基于轮廓发现算法,通过在二值化图像中查找白色像素点的连通分量来找到物体轮廓。此函数返回一个包含每个轮廓的点集的列表,每个轮廓都是一个 numpy 数组。该函数的语法为:
```python
contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
```
其中,image 是输入二值化图像,mode 是轮廓检索模式,method 是轮廓逼近方法,contours 和 hierarchy 分别是轮廓点集列表和轮廓间的关系,offset 是可选参数用于指定轮廓点集的偏移量。
相关问题
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);
}
}
```
阅读全文