背景
今天,在使用模板匹配的时候,突然程序卡死,CPU直接飙到100%。最后排查发现是模板匹配其中一个参数 NumLevels 导致的:
NumLevels:
The number of pyramid levels used during the search is determined with numLevels. If necessary, the number of levels is clipped to the range given when the shape model was created with CreateShapeModel. If numLevels is set to 0, the number of pyramid levels specified in CreateShapeModel is used.
大致意思是:
NumLevels: 搜索期间使用的金字塔级别数由 numLevels 确定。
CreateShapeModel 创建形状模型时会有一个范围,(我平时使用的是”auto“)
如果 numLevels 设置为 0,则使用 CreateShapeModel 中指定的金字塔等级数。
什么是金字塔级数
现在来理解一下金字塔:
这样看,其实金字塔就是对图片做卷积,也就是特征的提取,金字塔级数越大,抽取的特征越抽象,判定的速度就越快。
卡死的原因
卡死的原因是我,使用find_scaled_shape_model是我将 NumLevels 设置为1。
后面,将其设置为0后,就不卡了,后续我设置成2,依旧会卡但是没卡死。设置成3和4,就变得快了。
小结
- 如果图片比较大(比如有十几兆到上百兆),NumLevels 最好不要为1。
- 在创建模板时(CreateShapeModel),就要规划好金字塔层数。可以使用auto 关键字。
- 模板匹配时(find_scaled_shape_model),如果 numLevels 设置为 0,则使用 CreateShapeModel 中指定的金字塔等级数。