Example: 05-Feature-Detection/template_matching.py
# 本作品采用MIT许可证授权。
# 版权所有 (c) 2013-2023 OpenMV LLC。保留所有权利。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# 模板匹配示例 - 归一化互相关(NCC)
#
# 此示例展示了如何利用OpenMV Cam的NCC功能进行图像块匹配
# 在极度受控环境之外
# NCC的实际用途较为有限
#
# 警告:NCC功能支持需重构!当前该特性存在限制
# 大量改进才能变得实用。保留此脚本仅为展示
# 该功能存在,但当前状态尚不完善
import time
import sensor
import image
from image import SEARCH_EX
# 从image模块导入SEARCH_DS
# 重置传感器
sensor.reset()
# 设置传感器参数
sensor.set_contrast(1)
sensor.set_gainceiling(16)
# 使用SEARCH_EX进行模板匹配时的最高分辨率为QQVGA
sensor.set_framesize(sensor.QQVGA)
# 可通过设置窗口来缩小搜索图像范围
# 传感器设置窗口(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)
# 加载模板
# 模板应为小尺寸灰度图像(如32x32像素)
template = image.Image("/template.pgm")
clock = time.clock()
# Run template matching
while True:
clock.tick()
img = sensor.snapshot()
# find_template(模板, 阈值, [roi区域, 步长, 搜索模式])
# ROI: 感兴趣区域元组(x坐标, y坐标, 宽度, 高度)
# 步长: 循环步进值(y+=步长, x+=步长),增大步长可提速
# 搜索模式可选image.SEARCH_EX(穷举搜索)或image.SEARCH_DS(菱形搜索)
#
# 注意1:ROI区域必须小于图像且大于模板
# 注意2:菱形搜索模式下将忽略步长和ROI设置
r = img.find_template(
template, 0.70, step=4, search=SEARCH_EX
) # , roi=(10, 0, 60, 60))
if r:
img.draw_rectangle(r)
print(clock.fps())