模板匹配
模板匹配算法(Template Matching Algorithm),这是一种在图像处理和计算机视觉领域常用的方法,用于在一个大图像中寻找一个小模板图像的位置。模板匹配算法通过滑动窗口的方式在目标图像上移动模板图像,并计算模板图像与目标图像的局部区域之间的相似度。
算法步骤
-
读取图像:
kele
是目标图像,其中可能包含模板图像。temple
是模板图像,即我们希望在目标图像中找到的图像。kele=cv2.imread('kele.png') temple=cv2.imread('temple.png')
-
获取模板尺寸:
- 使用
temple.shape[:2]
获取模板图像的高度和宽度。h,w=temple.shape[:2]
- 使用
-
模板匹配操作:
- 使用
cv2.matchTemplate()
函数进行模板匹配。这个函数在目标图像上滑动模板图像,并计算每个位置的匹配度。 cv2.TM_CCOEFF_NORMED
是匹配方法之一,它使用标准化的相关系数来衡量匹配度。这种方法对亮度变化和对比度变化具有一定程度的鲁棒性。res=cv2.matchTemplate(kele,temple,cv2.TM_CCOEFF_NORMED)
- 使用
-
找到最佳匹配位置:
cv2.minMaxLoc()
函数用于找到匹配结果矩阵中的最小值和最大值及其位置。在这个上下文中,最大值位置maxloc
表示最佳匹配的位置。minval,maxval,minloc,maxloc=cv2.minMaxLoc(res)
-
计算匹配区域的坐标:
topleft
是最佳匹配的左上角坐标。bottomright
是匹配区域的右下角坐标,通过将topleft
与模板图像的尺寸相加得到。topleft=maxloc bottomright=(topleft[0]+w,topleft[1]+h)
-
在原图上绘制矩形框:
- 使用
cv2.rectangle()
在目标图像上绘制一个矩形框,标记出匹配区域。keletemple=cv2.rectangle(kele,topleft,bottomright,(0,255,0),2)
- 使用
-
显示结果图像:
- 使用
cv2.imshow()
显示结果图像,其中包括绘制的矩形框。cv2.imshow('keletemple',keletemple) cv2.waitKey(0)
- 使用
argparse
模块
argparse
模块的命令行参数解析脚本。argparse
模块用于编写用户友好的命令行接口。程序定义了一组参数,用户可以在命令行中设置这些参数的值,或者使用默认值。
-
导入
argparse
模块:import argparse
-
创建
ArgumentParser
对象:parser = argparse.ArgumentParser()
这行代码创建了一个
ArgumentParser
对象,用于处理命令行参数。 -
添加参数:
--serial
:一个字符串类型的参数,用于指定串行端口,有一个默认值 'com5'。--area
:一个整数类型的参数,用于指定面积,默认值为 1500。--confid
:一个浮点数类型的参数,用于指定信任度,默认值为 0.8。--aaa
:一个整数类型的参数,有一个默认值 100。-b
和--bb
:这是同一个参数的短选项和长选项,用于指定一个整数,默认值为 10。
-
解析命令行参数:
opt = parser.parse_args()
这行代码解析命令行参数,并将解析后的参数存储在
opt
对象中。 -
访问参数值:
aa = opt.aaa bb = opt.bb
这两行代码从
opt
对象中获取--aaa
和--bb
参数的值。 -
使用示例
假设这段代码保存在名为
script.py
的文件中,你可以在命令行中运行以下命令来传递参数:python script.py --serial com3 --area 2000 --confid 0.9 --aaa 150 -b 20
7. 输出结果
模板匹配算法优缺点
1. 优点:
- 实现简单,易于理解和编程。
- 对于简单场景和应用,效果较好。
2. 缺点:
- 对光照、遮挡和图像噪声敏感。
- 计算量大,特别是在大图像或多模板的情况下。
argparse
模块优缺点
1. 优点:
- 易于使用,可以自动生成帮助和使用说明。
- 支持参数的类型检查和默认值设置。
- 可以处理复杂的命令行参数结构。
2. 缺点:
- 对于非常复杂的命令行界面,可能需要更多的定制化。