
本实验中主要讲解模板匹配的算法。
节点参数为threshhold,表示匹配阈值,不同的算法有不同的判断逻辑(此处元宇宙实验逻辑错乱)。

建议使用三种归一化算法,方便匹配阈值。
1 模板匹配
1.1 平方差匹配 TM_SQDIFF
使用模板图与目标图对应的像素值使用平方差公式来计算,其结果越小(最小值为0),代表匹配程度越高。
注意:模板匹配都不要需要边缘填充,直接从原点开始计算。

模板:1.jpg
import cv2
import numpy as np
if __name__ == '__main__':
# 1. 图片输入
path = '11.png'
image_np = cv2.imread(path)
# 2. 灰度化(原图)
image_np_gray = cv2.cvtColor(image_np, cv2.COLOR_BGR2GRAY)
# 3. 模板输入
path = '12.jpg'
template = cv2.imread(path)
# 4. 灰度化(模板)
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 5. 模板匹配
# 获得模板宽高
h = template_gray.shape[0]
w = template_gray.shape[1]
print(h, w)
# 模板匹配算法
res = cv2.matchTemplate(
image_np_gray, # 原始图像
template_gray, # 模板
cv2.TM_SQDIFF # 平方差
)
print(res)
# 找到最小值:完美五角星
print(res.min())
# 设定动态阈值
threshold = res.min() * 33
print(threshold)
# 认为小于阈值的是匹配成功
loc = np.where(res < threshold)
print(loc)
print(len(loc))
# 6. 绘制轮廓
for x, y in zip(loc[1], loc[0]):
print('坐标:', (x, y))
# 画框
cv2.rectangle(
img=image_np,
pt1=(x, y),
pt2=(x + w, y + h),

最低0.47元/天 解锁文章
445

被折叠的 条评论
为什么被折叠?



