在按键精灵的自动化脚本开发中,图像识别(找图)是一项核心且强大的功能。而借助强大的开源计算机视觉库 OpenCV,按键精灵的找图能力在准确度和效率上都得到了质的飞跃。OpenCV.FindImgBest 命令正是其图像识别功能中的“利器”,用于在屏幕或图片中精准地找到最相似的一个目标位置。
OpenCV.FindImgBest 命令的主要功能是:在一张大的源图片(例如屏幕截图)中,寻找与给定的模板图片最为相似的一个区域,并返回该区域的坐标、相似度等信息。
与找多个目标的 FindImgEx 命令不同,FindImgBest 只返回它认为匹配度最高的单个结果,这在很多只需要点击一个固定按钮、寻找一个特定界面的场景中非常高效和实用。
函数名称
OpenCV.FindImgBest 找图返回最佳结果
函数功能
使用OpenCV多尺度模板找图,返回最佳结果
与FindPic的区别:
OpenCV找图:基于特征相似性的找图,允许一定几何形变或颜色差异,从而提高多分辨率容兼及抗干扰能力,容错率较高,但查找速度较慢、消耗cpu性能较大
由于允许相似性差异,查找的目标图片应尽量完整包含特征轮廓以减少特征相近的干扰数据
FindPic找图:基于遍历像素点颜色的找图,查找速度较快、消耗cpu性能较小,但容错率较低,适用于特征固定的静态场景
支持版本:安卓版v4.1.0、手机助手v4.4.0或以上版本
函数语法
result = OpenCV.FindImgBest(left, top, right, bottom, imgs, sim[, minScale, maxScale, stepCount])
函数参数
参数名
参数类型
是否必选
参数说明
left
int
是
识别区域的左上角x坐标
top
int
是
识别区域的左上角y坐标
right
int
是
识别区域的右下角x坐标
bottom
int
是
识别区域的右下角y坐标
imgs
string
是
要查找的图片,支持附件和本地路径图片,多个图片用“|”分隔,查找的图片越多耗时越长
sim
float
是
相似度阈值,过滤此相似度以下的结果,0到1之间的小数
minScale
float
否
目标图片最小缩放比例,默认为 0.5
maxScale
float
否
目标图片最大缩放比例,默认为 1.5
stepCount
int
否
缩放查找的步数,步数越大,精度越高,但耗时越长,默认为 5
函数返回
返回名
返回类型
返回说明
result
table
返回执行结果信息的键值表
result 包含的字段
字段名
字段类型
字段说明
code
int
执行函数的结果状态码,0为执行成功,非0为失败,失败原因查看msg字段
msg
string
执行结果的描述,失败则描述具体的失败原因
data
table
返回找图结果数组键值表,如存在n个结果,则table长度为n
data 包含的字段
字段名
字段类型
字段说明
x
int
识别到目标目标的左上角x坐标
y
int
识别到目标目标的左上角y坐标
w
int
识别到目标图片范围的宽度
h
int
识别到目标图片范围的高度
pic
string
识别到的目标图片名称(含路径)
score
float
识别到目标图片的相似度,0到1之间的小数
代码范例
Dim dirPath = GetSdcardDir() & "/test/",picPath = dirPath & "000.png"
Dim ret,ranTime
PutAttachment dirPath,"*"
TracePrint dir.Exist(picPath)
ranTime = TickCount()
ret = OpenCV.FindImgBest(0, 0, 0, 0, picPath & "|Attachment:111.png|Attachment:222.png", 0.3, 0.9, 1.2, 10)
TracePrint TickCount() - ranTime
If ret["code"] = 0 Then
For i = 1 to len(ret["data"])
TracePrint "识别到图片:" & ret["data"][i]["pic"] &_
",左上角x坐标:" & ret["data"][i]["x"] &_
",左上角y坐标:" & ret["data"][i]["y"] &_
",区域宽:" & ret["data"][i]["w"] &_
",区域高:" & ret["data"][i]["h"] &_
",可信度:" & ret["data"][i]["score"]
Next
Else
TracePrint ret["msg"]
End If
重要注意事项与技巧
-
图片路径:务必使用绝对路径,且路径中避免包含中文和特殊字符,以防止不必要的错误。
-
图片质量:
-
模板图片:尽量使用清晰、无干扰的BMP或PNG格式图片。截图时确保与屏幕上显示的内容完全一致。
-
屏幕截图:确保 InitOpenCV 后获取的屏幕图像是正确的。如果是后台找图,必须先使用 BindWindow 绑定游戏或窗口。
-
-
相似度设置:这是一个需要反复调试的参数。过高会找不到,过低容易误找。通过输出 outSim 值来观察每次匹配的实际情况,从而确定一个最佳值。
-
性能优化:
-
缩小查找区域:尽量不要老是用全屏查找。明确目标可能出现的大致区域(如游戏技能栏、聊天窗口),可以极大提升查找速度。
-
图片尺寸:模板图片不要过大,包含特征部分即可。
-
-
多分辨率适配:如果你的脚本需要在不同分辨率的设备上运行,模板图片最好是从当前设备上截取,或者使用多套图片方案进行判断。
-
错误处理:一定要对返回的 False(未找到)情况做处理,例如延迟后重新查找、记录日志或结束脚本,而不是直接操作 FindX/FindY,避免鼠标乱飞。
OpenCV.FindImgBest 是按键精灵OpenCV插件中最为常用和核心的命令之一。掌握它,就意味着你能够让你的脚本“看见”屏幕并做出智能反应。通过精心准备模板图片、耐心调试相似度参数和合理规划查找区域,你将能构建出非常稳定和高效的自动化脚本,广泛应用于游戏辅助、办公自动化、软件测试等多个领域。