函数介绍:
cv2.drawContours() 是 OpenCV 库中用于绘制轮廓的函数。
它的功能是根据轮廓数据在图像上绘制轮廓线条或填充轮廓。
以下是该函数的详细介绍:
函数原型:
cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)
参数解释:
- image: 要绘制轮廓的目标图像。这是一个多通道或单通道图像,通常是彩色图像(BGR)。
- contours: 轮廓数据,是一个 Python 列表,包含所有轮廓的点集。每个轮廓本身也是一个点集,可以由 cv2.findContours() 函数获得。
- contourIdx: 指定要绘制的轮廓的索引。如果是负值,则绘制所有轮廓。
- color: 轮廓线条的颜色。对于彩色图像,使用 (B, G, R) 格式,例如 (0, 255, 0) 表示绿色。
- thickness: 轮廓线条的厚度。如果为负值(如 cv2.FILLED),则填充轮廓内部。
- lineType: 线条的类型,有 8(8-connected line)、4(4-connected line)和 cv2.LINE_AA(抗锯齿线)可选。
- hierarchy(可选): 轮廓层次结构,通常由 cv2.findContours() 返回。如果提供,该参数将用于绘制轮廓的层次结构。
- maxLevel(可选): 用于绘制轮廓层次结构的最大层次。默认值为 0,表示只绘制当前层次的轮廓。如果为负值,则绘制所有层次的轮廓。
- offset(可选): 轮廓点坐标的偏移量。默认值为 (0, 0)。
使用示例:
以下是一个使用 cv2.drawContours() 函数的简单示例:
import cv2
import numpy as np
# 创建一个黑色图像
image = np.zeros((400, 400, 3), dtype=np.uint8)
# 定义一个简单的轮廓
contour = np.array([[50, 50], [300, 50], [300, 300], [50, 300]])
# 将轮廓转换为列表格式
contours = [contour]
# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
# 显示图像
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个示例中,我们首先创建一个黑色图像,然后定义一个四边形的轮廓。接下来,我们将轮廓绘制在图像上,使用绿色(0, 255, 0)和 3 像素的线条厚度。最后,显示绘制后的图像。
执行结果:
总结:
cv2.drawContours() 是一个非常有用的函数,可以在图像上绘制检测到的轮廓,方便进行形状分析、对象识别等操作。通过调整参数,可以实现各种绘制效果。
关于对 cv2.drawContours(mask, [c], -1, 255, -1)的解释:
cv2.drawContours(mask, [c], -1, 255, -1)是OpenCV库中用于绘制轮廓的函数调用。
这个函数主要用来在图像上绘制轮廓。让我们详细解释这个函数调用的各个
参数解释:
- mask:
- 类型:numpy.ndarray
- 描述:这是一个用于绘制轮廓的目标图像。在这个例子中,mask通常是一个单通道的二值图像(即掩码),其尺寸和原始图像相同。
- [c]:
- 类型:list,包含一个轮廓(numpy.ndarray)
- 描述:这是一个包含轮廓点的列表。在这里,c是一个单独的轮廓,它通常是由函数如cv2.findContours返回的一个轮廓。轮廓本质上是图像中的一组点,定义了某个物体的边界。
- -1:
- 类型:整数
- 描述:这是一个指定要绘制的轮廓索引的参数。-1表示绘制所有轮廓。在这个例子中,由于我们传递了一个单独的轮廓([c]),所以使用-1来绘制这个轮廓。
- 255:
- 类型:整数或元组(取决于图像的颜色空间)
- 描述:这是轮廓的颜色。对于二值图像(单通道),255表示白色。在彩色图像中,这个参数将是一个BGR格式的元组。例如,(255, 0, 0)表示蓝色。
- -1:
- .类型:整数
- 描述:这是轮廓的厚度。-1表示填充轮廓,即将轮廓内部全部填充指定颜色。如果指定正数,则表示绘制的轮廓线的厚度(单位是像素)。
综合以上参数,这个函数调用的效果是将轮廓c绘制到mask上,轮廓被填充成白色(255),填充模式是完全填充(-1)。
示例代码:
import cv2
import numpy as np
# 创建一个空白的黑色图像
mask = np.zeros((512, 512), dtype=np.uint8)
# 假设c是一个轮廓,由cv2.findContours函数返回
# 示例轮廓,假设为一个简单的矩形
c = np.array([[100, 100], [200, 100], [200, 200], [100, 200]])
# 使用cv2.drawContours绘制轮廓
cv2.drawContours(mask, [c], -1, 255, -1)
# 显示结果
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个例子中,mask上将会出现一个填充的白色矩形,表示绘制的轮廓c。
如下图所示: