-
Cv2.DrawContours()是 OpenCVSharp 中的一个函数,用于将图像中的轮廓绘制到图像上。它是图像处理和计算机视觉任务中非常重要的工具之一,特别是在目标检测、轮廓分析和形态学处理等方面。
一、核心原理
-
Cv2.DrawContours() 的核心原理是将从图像中提取出的轮廓信息(由 Cv2.FindContours() 函数获得)绘制到一个图像或矩阵上。轮廓通常表示为一系列点的集合,通过这些点描述了图像中某个物体或区域的边界。绘制过程是将这些轮廓点按照指定的颜色和线条样式绘制到目标图像上。
-
绘制轮廓的过程不涉及复杂的数学公式,但可以描述为:给定一个点集 P = {p_1, p_2, ..., p_n},其中每个点 p_i 为 (x_i, y_i),Cv2.DrawContours() 会通过某种绘图方式将这些点连接起来,形成轮廓。
-
在实际操作中,绘制的具体步骤如下:
- 轮廓存储:轮廓通常是通过 Cv2.FindContours() 获得的,其结构通常是一个包含多个 List<Point> 的集合,每个 List<Point> 对应一个轮廓。
- 绘制轮廓:Cv2.DrawContours() 函数接收这些点,并根据指定的线条属性(颜色、厚度等)将它们绘制到目标图像上。
二、功能详解
- 绘制单个或多个轮廓:支持一次性绘制多个轮廓,也可以选择仅绘制某个特定的轮廓。
- 轮廓属性自定义:可以自定义线条的颜色、厚度等属性,以满足不同的显示需求。
- 填充轮廓:除了绘制边界线外,还可以选择填充轮廓内部区域,通常用于标记区域。
三、参数
public static void DrawContours(
Mat image,
List<List<Point>> contours,
int contourIdx,
Scalar color,
int thickness = 1,
LineTypes lineType = LineTypes.Link8,
Mat hierarchy = null,
int maxLevel = int.MaxValue,
Point offset = new Point()
);
-
image (Mat):目标图像,轮廓将被绘制到该图像上。通常为原始图像或一个空白图像。
-
contours (List<List>)
这是一个包含多个轮廓的列表,每个轮廓是一个 List<Point>,即一个点的集合。通常这个参数是由 Cv2.FindContours() 函数返回的轮廓数据。 -
contourIdx (int)
要绘制的轮廓索引。如果值为 -1,表示绘制所有轮廓。如果只想绘制某个特定的轮廓,可以指定该轮廓的索引。 -
color (Scalar)
轮廓的颜色,指定了绘制轮廓的颜色,可以使用 OpenCV 的 Scalar 类来设置颜色,例如 new Scalar(255, 0, 0) 表示蓝色。 -
thickness (int)
线条的粗细,指定绘制轮廓时线条的厚度。默认值为 1。 -
lineType (LineTypes)
线条类型,指定绘制轮廓时的线条类型。常用类型包括:
LineTypes.Link8:8连接方式,表示每个像素与相邻的 8 个像素连接。
LineTypes.AntiAlias:抗锯齿线,适用于更加平滑的曲线。 -
hierarchy (Mat)
轮廓的层次结构,通常由 Cv2.FindContours() 返回的 Mat 数据。用于表示轮廓之间的嵌套关系,通常在多层次轮廓中使用。 -
maxLevel (int)
最大绘制轮廓的层次级别。默认为 int.MaxValue,表示绘制所有轮廓。 -
offset (Point)
在绘制时对所有轮廓进行平移的偏移量。通过调整该参数,可以将绘制的轮廓整体平移到不同的位置。
四、资料
技能拾荒者《37-OpenCVSharp —- Cv2.DrawContours()函数功能(轮廓绘制)详解》
https://blog.csdn.net/weixin_45590420/article/details/143950245














网友评论