匹配动画窗口1 - MatchAnimationFromPtr
函数简介
匹配动画窗口,可用于GIF动画识别。可在识别指定时间内动图。查找到立马返回结果,返回相对绑定窗口坐标坐标
识别结果最长等待时间为time + 1000ms
x1 , y1, x2, y2传 0, 0, 0, 0 为窗口整个客户区
返回数据类型解析:
{
"MatchVal": 0.85,//数据相似度
"MatchState": true,//返回数据是否大于指定精度,用于快速判断识别结果
"Index": 0,//多图识别时的返回索引
"Angle": 45.0,//识别结果角度
"MatchPoint": {
"x": 100,//识别结果X坐标
"y": 200//识别结果Y坐标
}
}
接口名称
MatchAnimationFromPtr
DLL调用
long MatchAnimationFromPtr(long ola, int x1, int y1, int x2, int y2, long templ, double matchVal, int type, double angle, double scale, int delay, int time, int threadCount)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由DLL版本 CreateCOLAPlugInterFace 接口生成x1
(整型数): 查找区域的左上角X坐标y1
(整型数): 查找区域的左上角Y坐标x2
(整型数): 查找区域的右下角X坐标y2
(整型数): 查找区域的右下角Y坐标templ
(长整型数): OLAImage对象的地址,由LoadImage等接口生成matchVal
(双精度浮点数): 相似度阈值,范围0-1,如0.85表示85%相似度type
(整型数): 匹配类型- 1: 灰度匹配,速度快
- 2: 彩色匹配
- 3: 透明匹配
angle
(双精度浮点数): 旋转角度,每次匹配后旋转指定角度继续匹配,直到匹配成功。角度越小匹配次数越多,时间越长。0为不旋转,速度最快scale
(双精度浮点数): 窗口缩放比例,默认为1。可通过GetScaleFromWindows接口获取当前窗口缩放delay
(整型数): 动画帧间隔,单位毫秒time
(整型数): 总识别时间,单位毫秒threadCount
(整型数): 用于查找的线程数。线程数需要根据delay帧率自行调整:- 过小会导致识别时间到期未识别完
- 过大会导致CPU占用过大
示例:
// 创建OLA对象
long ola = CreateCOLAPlugInterFace();
// 加载模板图片
long templ = LoadImage(ola, "animation.bmp");
// 执行动画匹配
long ret = MatchAnimationFromPtr(ola, 0, 0, 0, 0, templ, 0.85, 1, 45.0, 1.0, 20, 1000, 5);
// 检查操作是否成功
if (ret != 0) {
// 获取匹配结果
char* result = (char*)ret;
printf("匹配结果: %s\n", result);
// 释放返回的字符串内存
FreeStringPtr(result);
} else {
// 匹配失败
}
// 释放模板图片内存
FreeImagePtr(ola, templ);
COM调用
string MatchAnimationFromPtr(int x1, int y1, int x2, int y2, long templ, double matchVal, int type, double angle, double scale, int delay, int time, int threadCount)
参数定义:
x1
(整型数): 查找区域的左上角X坐标y1
(整型数): 查找区域的左上角Y坐标x2
(整型数): 查找区域的右下角X坐标y2
(整型数): 查找区域的右下角Y坐标templ
(长整型数): OLAImage对象的地址matchVal
(双精度浮点数): 相似度阈值,范围0-1type
(整型数): 匹配类型angle
(双精度浮点数): 旋转角度scale
(双精度浮点数): 窗口缩放比例delay
(整型数): 动画帧间隔,单位毫秒time
(整型数): 总识别时间,单位毫秒threadCount
(整型数): 用于查找的线程数
示例:
// 加载模板图片
long templ = ola.LoadImage("animation.bmp");
// 执行动画匹配
string result = ola.MatchAnimationFromPtr(0, 0, 0, 0, templ, 0.85, 1, 45.0, 1.0, 20, 1000, 5);
// 检查操作是否成功
if (!result.empty()) {
// 匹配成功,result包含匹配结果
cout << "匹配结果: " << result << endl;
} else {
// 匹配失败
}
// 释放模板图片内存
ola.FreeImagePtr(templ);
返回值
字符串: 返回JSON格式的匹配结果,包含以下字段:
{
"MatchVal": 0.85, // 数据相似度
"MatchState": true, // 返回数据是否大于指定精度,用于快速判断识别结果
"Index": 0, // 多图识别时的返回索引
"Angle": 45.0, // 识别结果角度
"MatchPoint": {
"x": 100, // 识别结果X坐标
"y": 200 // 识别结果Y坐标
}
}
注意事项
- 当x1, y1, x2, y2都传0时,将搜索整个窗口客户区
- 识别结果最长等待时间为time + 1000ms
- 匹配类型的选择:
- 灰度匹配速度最快,但精度较低
- 彩色匹配精度较高,但速度较慢
- 透明匹配适用于带透明通道的图片
- 线程数的选择:
- 建议根据动画帧率和CPU核心数来设置
- 一般建议设置为CPU核心数的1-2倍
- 角度参数影响匹配时间和精度:
- 角度越小,匹配次数越多,时间越长
- 角度为0时速度最快,但可能错过旋转的目标
- 缩放比例应与窗口实际缩放比例一致
- DLL调用返回的字符串指针需要调用 FreeStringPtr 释放内存
- 返回的坐标是相对于绑定窗口客户区的坐标
相关函数
- LoadImage: 加载图片
- FreeImagePtr: 释放图片内存
- FreeStringPtr: 释放字符串内存
- GetScaleFromWindows: 获取窗口缩放比例