【JavaScript】在全屏或指定区域范围内寻找指定图片的坐标(找图)
原型:
seekImage(imageName)
seekImage(imageName, sim)
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName)
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim)
seekImage(imageInfo)
seekImage(imageInfo, sim)
注,在版本1.8.1之后,又新增了两个seekImage函数,其原型如下:
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim, beGray)
seekImage(imageName, sim, beGray)
是否支持多设备:
不支持
对应的 REST API:
描述:
在全屏或指定区域范围内寻找指定图片的坐标,支持相似查找。如找到目标图,则返回找到位置的中间点坐标。该函数有以上原型方法,对应不同的参数。
注意:
尽管我们支持在一台手机上截图,而在另一台手机上搜图,但这两台手机的高宽比例必须一致。此外,如果手机截图是在横屏时获取的,找图时也必须保证手机是横屏的;同理,纵屏截图也必须在纵屏时查找。
目前这个版本仅支持bmp,在未来的开发计划中,我们将逐步提供各种图像格式的支持。
更多信息请看seekImage快速入门
参数:
-
seekImage(imageName)
-
seekImage(imageName, sim)
imageName:图像绝对路径,必须是bmp类型
sim: 相似度,取值范围为[0.0,1.0]。1表示图像完全匹配。该值越小,对相似度的要求也越低。如果为0,则该函数返回值为与搜索图最相似区域的中心坐标。 不填sim表示使用缺省的相似度1.0. -
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName)
-
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim)
topLeftX:屏幕上指定范围左上角X坐标
topLeftY:屏幕上指定范围左上角Y坐标
bottomRightX:屏幕上指定范围右下角X坐标
bottomRightY:屏幕上指定范围右下角Y坐标
imageName:图像绝对路径,必须是bmp类型
sim: 相似度,取值范围为[0.0,1.0]。1表示图像完全匹配。该值越小,对相似度的要求也越低。如果为0,则该函数返回值为与搜索图最相似区域的中心坐标。不填sim表示使用缺省的相似度1.0. -
seekImage(imageInfo)
-
seekImage(imageName, sim)
imageInfo:ImageInfo对象,脚本中用于存储图像信息的对象,其成员变量包括:
a) imagePath: 图像的绝对路径
b) x: 屏幕搜索范围的左上角X坐标
c) y: 屏幕搜索范围的左上角Y坐标
d) width: 屏幕搜索范围的宽度
e) height: 屏幕搜索范围的高度
f) srcResolutionX: 要搜索的图像从那款分辨率的手机上获得的,此参数为该分辨率的宽度
g) srcResolutionY: 要搜索的图像从那款分辨率的手机上获得的,此参数为该分辨率的高度 -
seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim, beGray)
-
seekImage(imageName, sim, beGray)
topLeftX:屏幕上指定范围左上角X坐标
topLeftY:屏幕上指定范围左上角Y坐标
bottomRightX:屏幕上指定范围右下角X坐标
bottomRightY:屏幕上指定范围右下角Y坐标
imageName:图像绝对路径,必须是bmp类型
sim: 相似度,取值范围为[0.0,1.0]。1表示图像完全匹配。该值越小,对相似度的要求也越低。如果为0,则该函数返回值为与搜索图最相似区域的中心坐标。不填sim表示使用缺省的相似度1.0.
beGray:当此值为true时(默认为true),表示图片要先进行灰度处理,然后再进行找图。当此值为false时候,表示图片不进行任何处理就进行找图,当然灰度处理后找图速度更快。
返回值:
对象:Coord 对象:可以通过获取到的对象找到图像的中心点坐标,比如coord.x;coord.y;
示例:
在全屏或指定区域范围内寻找指定图片的坐标
指定图片如下图所示:
手机屏幕如下图所示:
//seekImage(imageName) 示例,全屏查找指定图像
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage("E:\\sigmaTC\\产品20180611\\image\\image1080.bmp");
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
// seekImage(imageName, sim)示例,全屏查找指定图像,指定相似度
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage("E:\\sigmaTC\\产品20180611\\image\\image1080.bmp", 1.0);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName)示例,指定区域查找指定图像
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage(13, 422, 583, 986, "E:\\sigmaTC\\产品20180611\\image\\image1080.bmp");
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim)示例,指定区域查找指定图像,指定相似度
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage(13, 422, 583, 986, "E:\\sigmaTC\\产品20180611\\image\\image1080.bmp", 1.0);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(imageInfo)示例,查找指定ImageInfo对象图像
var device = Device.getMain(); //获取当前设备对象
// 创建ImageInfo对象
var imageInfo = newImageInfo();
imageInfo.imagePath="E:\\sigmaTC\\产品20180611\\image\\image1080.bmp";
imageInfo.x=3;
imageInfo.y=3;
imageInfo.width=device.width - 10;
imageInfo.height=device.height - 10;
imageInfo.srcResolutionX=720;
imageInfo.srcResolutionY=1280;
//指定区域查找指定ImageInfo对象图像
var ret = device.seekImage(imageInfo);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(imageName, sim)示例,查找指定ImageInfo对象图像,指定相似度
var device = Device.getMain(); //获取当前设备对象
// 创建ImageInfo对象
var imageInfo = newImageInfo();
imageInfo.imagePath="E:\\sigmaTC\\产品20180611\\image\\image1080.bmp";
imageInfo.x=5;
imageInfo.y=5;
imageInfo.width=device.width - 5;
imageInfo.height=device.height - 10;
imageInfo.srcResolutionX=720;
imageInfo.srcResolutionY=1280;
//查找指定ImageInfo对象图像,指定相似度
var ret = device.seekImage(imageInfo, 0.7);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(topLeftX, topLeftY, bottomRightX, bottomRightY, imageName, sim, beGray)示例,指定区域查找指定图像,指定相似度,指定是否进行图像灰度处理
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage(13, 422, 583, 986, "E:\\sigmaTC\\产品20180611\\image\\image1080.bmp", 0.8, true);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
//seekImage(imageName, sim, beGray)全屏查找指定图像,指定相似度,指定是否进行图像灰度处理
var device = Device.getMain(); //获取当前设备对象
var ret = device.seekImage(13, 422, 583, 986, "E:\\sigmaTC\\产品20180611\\image\\image1.bmp", 0.8, false);
if (ret != null){
print("Center X: " + ret.x);
print("Center Y: " + ret.y);
} else {
print("没有在手机屏幕找到该图");
}
运行结果:
//在手机屏幕找到指定图片,则返回:
Center X: 277
Center Y: 890
//在手机屏幕未找到指定图片,则返回:
没有在手机屏幕找到该图