![]() |
OpenCV 4.12.0
开源计算机视觉
|
下一个教程: 轮廓特征
轮廓可以简单地解释为连接所有连续点(沿着边界)的曲线,这些点具有相同的颜色或强度。轮廓是形状分析、对象检测和识别的有用工具。
要绘制轮廓,使用 cv.drawContours 函数。它也可以用于绘制任何形状,只要您有它的边界点。
我们使用以下函数:cv.findContours (image, contours, hierarchy, mode, method, offset = new cv.Point(0, 0))
| image | source,一个 8 位单通道图像。非零像素被视为 1。零像素保持为 0,因此图像被视为二进制。 |
| contours | 检测到的轮廓。 |
| hierarchy | 包含有关图像拓扑的信息。它具有与轮廓数量相同的元素。 |
| mode | 轮廓检索模式(参见 cv.RetrievalModes)。 |
| 方法 | 轮廓近似方法(参见 cv.ContourApproximationModes)。 |
| offset | 可选的偏移量,每个轮廓点都将偏移该量。如果从图像 ROI 中提取轮廓,然后应在整个图像上下文中分析它们,这将很有用。 |
cv.drawContours (image, contours, contourIdx, color, thickness = 1, lineType = cv.LINE_8, hierarchy = new cv.Mat(), maxLevel = INT_MAX, offset = new cv.Point(0, 0))
| image | 目标图像。 |
| contours | 所有输入轮廓。 |
| contourIdx | 指示要绘制的轮廓的参数。如果为负,则绘制所有轮廓。 |
| color | 轮廓的颜色。 |
| thickness | 绘制轮廓的线条粗细。如果为负,则绘制轮廓内部。 |
| lineType | 线条连通性(参见 cv.LineTypes)。 |
| hierarchy | 有关层次结构的可选信息。如果您只想绘制某些轮廓(请参见 maxLevel),则这是必需的。 |
| maxLevel | 绘制轮廓的最大级别。如果为 0,则仅绘制指定的轮廓。如果为 1,则该函数绘制轮廓和所有嵌套轮廓。如果为 2,则该函数绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套的轮廓,依此类推。仅当有层次结构可用时,才考虑此参数。 |
| offset | 可选的轮廓偏移参数。 |
这是 cv.findContours 函数中的第五个参数。它实际上表示什么?
上面,我们说过轮廓是具有相同强度的形状的边界。它存储形状边界的 (x,y) 坐标。但是它是否存储所有坐标?这由轮廓近似方法指定。
如果您传递 cv.ContourApproximationModes.CHAIN_APPROX_NONE.value,则会存储所有边界点。但是我们实际上需要所有点吗?例如,您找到了直线的轮廓。您是否需要直线上的所有点来表示该直线?不,我们只需要该线的两个端点。这就是 cv.CHAIN_APPROX_SIMPLE 所做的。它会删除所有冗余点并压缩轮廓,从而节省内存。