在定位、搜索固定界面图块时,经常用到模板匹配,opencv自带的图像模板匹配好用,易用,高效,稳定,且有多种匹配计算方式。
具体示例如下:
模板图:
待搜索图:
具体实现代码如下:
#-*-coding:utf-8-*-
# date:2024-06
# Author: DataBall
# function: 图像模板匹配
import cv2
import os
def match_image_block(img_model,img):
h,w = img_model.shape[:2]
res_match = cv2.matchTemplate(img_model, img, cv2.TM_CCOEFF_NORMED) # 图像模板匹配
gminval, gmaxval, gminloc, gmaxloc = cv2.minMaxLoc(res_match)
score_ = gmaxval
x,y = gmaxloc[0],gmaxloc[1]
return score_,[x,y,x+w,y+h] # 返回模板匹配分数 和 搜索坐标框
if __name__ == "__main__":
img_model = cv2.imread("image/model.png") # 模板图
img = cv2.imread("image/img.png") # 待搜索图
score_,(x1,y1,x2,y2) = match_image_block(img_model,img)
print("score:{:.2f},(x1,y1,x2,y2):{}".format(score_,(x1,y1,x2,y2))) # 打印模板匹配分数 和 搜索坐标框
# 模板搜索结果可视化图片显示
cv2.rectangle(img, (x1,y1), (x2,y2), (255, 0, 155), 6)
cv2.rectangle(img, (x1,y1), (x2,y2), (0, 255, 0), 2)
cv2.namedWindow("img_model",0)
cv2.imshow("img_model",img_model)
cv2.imshow("image",img)
cv2.waitKey(0)
脚本执行log如下:
score:0.84,(x1,y1,x2,y2):(810, 101, 869, 164)
可视化匹配搜索框如下:
助力快速掌握数据集的信息和使用方式。
数据可以如此美好!