在自动化脚本领域,按键精灵集成了强大的开源计算机视觉库——OpenCV,并提供了 OpenCV.FindImgAll 函数。这个函数彻底改变了按键精灵图像识别的能力,本文将带你全面了解并掌握它。
OpenCV.FindImgAll 是按键精灵调用其内置OpenCV模块的一个高级找图函数。它的核心功能是:在屏幕的指定区域内,查找所有与给定模板图片相匹配的位置,并返回一个包含所有匹配点坐标的数组。
与FindPic的区别:
OpenCV找图:基于特征相似性的找图,允许一定几何形变或颜色差异,从而提高多分辨率容兼及抗干扰能力,容错率较高,但查找速度较慢、消耗cpu性能较大
由于允许相似性差异,查找的目标图片应尽量完整包含特征轮廓以减少特征相近的干扰数据
FindPic找图:基于遍历像素点颜色的找图,查找速度较快、消耗cpu性能较小,但容错率较低,适用于特征固定的静态场景
函数名称
OpenCV.FindImgAll 找图返回全部结果
函数功能
使用OpenCV多尺度模板找图,返回全部结果
函数语法
result = OpenCV.FindImgAll(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.FindImgAll(0, 0, 0, 0, picPath & "|Attachment:111.png|Attachment:222.png", 0.8, 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
优势与注意事项
优势:
-
多目标查找:核心优势,一键获取所有结果。
-
速度快:OpenCV算法优化程度高,远高于传统FindPic。
-
精度高:支持透明通道和强大的匹配算法,抗干扰能力强。
-
功能灵活:提供两种返回模式,适应不同场景。
注意事项:
-
插件依赖:脚本需附带或确保系统有正确的OpenCV插件。
-
相似度权衡:sim值设置过高可能找不到目标,过低可能找到错误目标,需要反复测试。
-
性能考量:查找区域越大,耗时越长。务必精确指定查找范围。
OpenCV.FindImgAll 是按键精灵迈向“智能自动化”的关键一步。它将强大的开源视觉库的力量交到了脚本开发者手中,使得开发复杂、稳定、高效的图形化界面自动化脚本成为可能。
无论是游戏中的批量拾取、办公软件中的批量操作,还是应用程序中的多项选择,只要你需要与屏幕上的多个相同元素进行交互,OpenCV.FindImgAll 都是你的不二之选。掌握它,让你的脚本效能提升一个档次!