图色函数
说明
设置
image.useOpencvMat 初始化参数
- 切换图片存储模式为opencv的mat格式
- 切换后抓图、读取图片、找图、找色等都会切换到mat格式,速度更快内存更少
- 实测内存减少50%-80%,CPU减少20%-30%,速度提升100%-200%
- 如果让图片格式切换请参考 imageToMatFormat和matToImageFormat两个函数
- @param use 1 是 0 否
- @return
{boolean|*}
true 成功 false 失败
function main() {
// 先初始化opencv 因为要用到 别忘了
image.initOpenCV()
let r = image.useOpencvMat(1);
logd(r)
//剩下的代码和之前一样 找色 找图等操作
}
main();
image.setInitParam 初始化参数
- 设置图色模块初始化参数,设置找图超时时间
- @param params 超时时间,单位是毫秒
function main() {
//action_timeout 找图找色动作的最大时间,超时后会自动返回避免阻塞
image.setInitParam({"action_timeout": 1000});
image.setInitParam(
{
"action_timeout": 1000,
"auto_click_request_dialog": false
}
);
}
main();
image.setFindColorImageMode 设置找色的算法模式
- 设置找色找图的算法模式
- 适合EC 鸿蒙Next 1.0.0+
- @param type 1 代表老的查找算法,2代表新的查找算法
- @return boolean
function main() {
image.setFindColorImageMode(1);
}
main();
流式截图
image.startScreenStream 开启流式截图
- 初始化一个图像流的截屏模式,这个速度比其他的方式要快
- 适配 EC 鸿蒙Next 1.0.0+
- @return 布尔型 true 代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let cap = image.startScreenStream()
logd("截图: " + cap)
}
main();
image.stopScreenStream 停止流式截图
- 停止图像流
- @return 布尔型 true 代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let cap = image.stopScreenStream()
logd("截图: " + cap)
}
main();
image.captureScreenStream 图像流
- 从图像流中获取一张图片
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
let cap = image.captureScreenStream()
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();
普通截图
image.captureFullScreenEx 截取全屏Image对象
- 抓取全屏,格式是JPG
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
console.time(1)
let cap = image.captureFullScreenEx()
logd("截图数据: " + cap + " 耗时: " + console.timeEnd(1))
image.saveTo(cap, "b.jpg");
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
image.captureFullScreen 截取全屏Image对象
- 截取当前屏幕并返回一个Image对象, 这个格式是jpg。
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
for (let i = 0; i < 10; i++) {
let cap = image.captureFullScreen()
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();
比色
image.cmpColor 多点比色
- 单点或者多点比色,找到所有符合标准的点,如果都符合返回true,否则是false
- @param image1 图片
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标,默认填写0全屏查找
- @param y 区域的Y起始坐标,默认填写0全屏查找
- @param ex 终点X坐标,默认填写0全屏查找
- @param ey 终点Y坐标,默认填写0全屏查找
- @return 布尔型,true代表找到了 false代表未找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points3 = "205|1130|0xff944b-0x101010,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points = image.cmpColor(aimage, points3, 0.9, 0, 0, 0, 0);
logd("points " + points);
//图片要回收
image.recycle(aimage)
}
}
main();
image.cmpColorJ 多点比色(JSON)
- 单点或者多点比色,找到所有符合标准的点,如果都符合返回true,否则是false
- @param image1 图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return
{boolean}
true代表找到了 false代表未找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.cmpColorJ(aimage, "a.json");
logd("points " + points);
//图片要回收
image.recycle(aimage)
}
}
main();
image.cmpColorEx 多点比色扩展
- 单点或者多点比色,找到所有符合标准的点,自动截图,如果都符合返回true,否则是false
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标,默认填写0全屏查找
- @param y 区域的Y起始坐标,默认填写0全屏查找
- @param ex 终点X坐标,默认填写0全屏查找
- @param ey 终点Y坐标,默认填 写0全屏查找
- @return 布尔型,true代表找到了 false代表未找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points3 = "205|1130|0xff944b-0x101010,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points = image.cmpColorEx(points3, 0.9, 0, 0, 0, 0);
logd("points " + points);
}
main();
image.cmpMultiColor 多组比色
- 多点或者 多点数组比色,找到所有符合标准的点,依次查找,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到
- @param image1 图片
- @param points 数组类似这样 ["6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696","6|1|0x969696"]
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标,默认填写0全屏查找
- @param y 区域的Y起始坐标,默认填写0全屏查找
- @param ex 终点X坐标,默认填写0全屏查找
- @param ey 终点Y坐标,默认填写0全屏查找
- @return 整型,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points1 = "205|112230|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points2 = "205|113022|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points3 = "205|1130|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points = image.cmpMultiColor(aimage, [points1, points2, points3], 0.9, 0, 0, 0, 0);
logd("points " + points);
//图片要回收
image.recycle(aimage)
}
}
main();
image.cmpMultiColorJ 多组比色(JSON)
- 多点或者多点数组比色,找到所有符合标准的点,依次查找,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到
- @param image1 图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return
{boolean}
true代表找到了 false代表未找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.cmpMultiColorJ(aimage, "a.json");
logd("points " + points);
//图片要回收
image.recycle(aimage)
}
}
main();
image.cmpMultiColorEx 多组比色扩展
- 多点或者多点数组比色,找到所有符合标准的点,自动截屏,依次查找,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到
- @param points 数组类似这样 ["6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696","6|1|0x969696"]
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标,默认填写0全屏查找
- @param y 区域的Y起始坐标,默认填写0全屏查找
- @param ex 终点X坐标,默认填写0全屏查找
- @param ey 终点Y坐标,默认填写0全屏查找
- @return 整型,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points1 = "205|112230|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points2 = "205|113022|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points3 = "205|1130|0xff944b,211|1158|0xff8e42,191|1175|0xfcfbf7";
let points = image.cmpMultiColorEx([points1, points2, points3], 0.9, 0, 0, 0, 0);
logd("points " + points);
}
main();
找色
image.findColor 单点找色
- 在图片中找到颜色和color完全相等的某个点,并返回该点的坐标;如果没有找到,则返回null。
- @param image 图片
- @param color 要寻找的颜色类似, 0xCDD7E9-0x101010,0xCDD7E9-0x101010
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制个数
- @param orz 方向,分别从1-8
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findColor(aimage, "0xCDD7E9-0x101010,0xCDD7E9-0x101010", 0.9, 0, 0, 0, 0, 10, 1);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points) {
for (let i = 0; i < points.length; i++) {
logd(JSON.stringify(points[i]), points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findColorJ 单点找色(JSON)
- 在图片中找到颜色和color完全相等的点,参数从JSON中获取如果没有找到,则返回null。
- @param image 图 片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return
{null|PointIndex[]}
坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findColorJ(aimage, "金币.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(JSON.stringify(points[i]), points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findColorEx 自动截屏单点找色
- 在当前屏幕中找到颜色和color完全相等的点,并返回该点的坐标;如果没有找到,则返回null。
- @param color 要寻找的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制个数
- @param orz 方向,分别从1-8
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points = image.findColorEx("0xCDD7E9-0x101010,0xCDD7E9-0x101010", 0.9, 0, 0, 0, 0, 10, 1);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(JSON.stringify(points[i]), points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
}
main();
image.findColorExJ 自动截屏单点找色(JSON)
- 当前屏幕中找到颜色和color完全相等的点,参数从JSON中获取如果没有找到,则返回null。
- @param jsonFileName res文件中取色工具生成的JSON文件,
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points = image.findColorExJ("金币.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i], points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
}
main();
image.findMultiColor 多点找色
- 多点找色,找到所有符合标准的点,类似于按键精灵的多点找色。
- @param image 要找色的图片
- @param firstColor 第一个点的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制个数
- @param orz 方向,分别从1-8
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限 失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findMultiColor(aimage, "0xDD7A5F-0x101010", "29|25|0xBB454B-0x101010,58|44|0xA6363A-0x101010", 0.9, 0, 0, 0, 0, 10, 1);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i], points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findMultiColorJ 多点找色(JSON)
- 多点找色,找到所有符合标准的点,参数从JSON文件中读取,类似于按键精灵的多点找色
- 整张图片都找不到时返回null
- @param image1 要找色的图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return
{null|Point[]}
坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findMultiColorJ(aimage, "金币.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i], points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findMultiColorEx 自动截屏多点找色
- 多点找色,找到所有符合标准的点,类似于按键精灵的多点找色。
- @param firstColor 第一个点的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制个数
- @param orz 方向,分别从1-8
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points = image.findMultiColorEx("0xDD7A5F-0x101010", "29|25|0xBB454B-0x101010,58|44|0xA6363A-0x101010", 0.9, 0, 0, 0, 0, 10, 1);
logd("points " + JSON.stringify(points));
//这玩意 是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i], points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
}
main();
image.findMultiColorExJ 自动截屏多点找色(JSON)
- 多点找色,找到所有符合标准的点,自动抓取当前屏幕的图片,参数从JSON文件中读取,类似于按键精灵的多点找色
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let points = image.findMultiColorExJ("金币.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i], points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
}
main();
找非色
image.findNotColor 找非色
- 在图片中找到颜色和color完全不相等的点,如果没有找到,则返回null。
- 适配EC 鸿蒙Next 1.0.0+
- @param image 图片
- @param color 要寻找的颜色类似, 0xCDD7E9-0x101010,0xCDD7E9-0x101010,EC 工具生成
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区 域的X起始坐标
- @param y 区域的Y起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制个数
- @param orz 方向,分别从1-8
- @return 多个Point 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findNotColor(aimage, "0xCDD7E9-0x101010,0xCDD7E9-0x101010", 0.9, 0, 0, 0, 0, 10, 1);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points) {
for (let i = 0; i < points.length; i++) {
logd(JSON.stringify(points[i]), points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findNotColorJ 找非色(JSON)
- 在图片中找到颜色和color完全不相等的点,如果没有找到,则返回null。
- @param image1 图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json
- @return
{null|PointIndex[]}
多个 PointIndex 坐标点数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let aimage = image.captureFullScreen();
if (aimage != null) {
let points = image.findNotColorJ(aimage, "a.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points) {
for (let i = 0; i < points.length; i++) {
logd(JSON.stringify(points[i]), points[i].x, points[i].y)
//点击坐标
clickPoint(points[i].x, points[i].y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
找图
image.findImageByColor 透明找图
- 透明找图(这个函数不需要初始化Opencv)
- @param image 大图片
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @return 多个Point 坐标点数组或者null
function main() {
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//从工程目录下res文件夹下读取sms.png文件
let sms = readResAutoImage("sms.png");
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImageByColor(aimage, sms, 0, 0, 0, 0, 0.8, 5);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
let x = points[i].x
let y = points[i].y
//点击坐标
clickPoint(x, y)
}
}
//图片要 回收
image.recycle(aimage)
}
//图片要回收
image.recycle(sms)
}
main();
image.findImageByColorJ 透明找图(JSON)
- 通过颜色找图,支持透明图,这个不需要处理话opencv
- 整张图片都找不到时返回null
- @param image1 大图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json, 小图路径请到json文件配置
- @return
{null|Point[]}
坐标点数组或者null
function main() {
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImageByColorJ(aimage, "a.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
let x = points[i].x
let y = points[i].y
//点击坐标
clickPoint(x, y)
}
}
image.recycle(aimage)
}
}
main();
image.findImageByColorEx 透明找图扩展
- 通过颜色找图,支持透明图,这个不需要处理话opencv
- 整张图片都找不到时返回null
- @param image1 大图片
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param limit 限制结果 的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @param extra 扩展函数,map结构例如
{"firstColorOffset":"#101010","firstColorThreshold":1.0,"otherColorOffset":"#101010","otherColorThreshold":0.9,"cmpColorSucThreshold":1.0}
- firstColorOffset: 第一个匹配到的颜色偏色,例如 #101010
- firstColorThreshold: 第一个匹配到的颜色偏色系数,例如 0.9
- otherColorOffset: 剩下需要找的颜色 偏色,例如 #101010
- otherColorThreshold: 剩下需要找的颜色 偏色系数,例如 0.9
- cmpColorSucThreshold: 成功匹配多少个颜色系数 就认为是成功的,例如 0.9 = 90%个点
- startX: 第一个点从哪里开始找的X坐标
- startY: 第一个点从哪里开始找的Y坐标
- @return 多个Point 坐标点数组或者null
function main() {
let d = startEnv();
logd("启动服务--{}", d)
let smallTmplate = readResAutoImage("tmp4.png");
for (let i = 0; i < 100; i++) {
sleep(1000)
let img = image.captureFullScreen();
logd("img = {}", img)
if (img == null) {
continue
}
console.time(1)
let extra = {
"firstColorOffset": "#202020",
"otherColorOffset": "#000000",
"cmpColorSucThreshold": 1,
"firstColorThreshold": "1",
"otherColorThreshold": "1",
"startX": 0,
"startY": 0
}
let points = image.findImageByColorEx(img, smallTmplate, 0, 0, 0, 0, 100, extra);
logd("time-{}", console.timeEnd(1))
//这玩意是个数组
if (points) {
logd("points " + JSON.stringify(points));
}
image.recycle(img)
}
image.recycle(smallTmplate)
}
main()
image.findImageByColorExJ 透明找图扩展(JSON)
- 通过颜色找图,支持透明图,这个不需要处理话opencv
- 整张图片都找不到时返回null
- @param image1 大图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中, 例如 a.json, 小图路径请到json文件配置
- @return
{null|Point[]}
坐标点数组或者null
function main() {
sleep(1000)
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImageByColorExJ(aimage, "a.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
let x = points[i].x
let y = points[i].y
//点击坐标
clickPoint(x, y)
}
}
image.recycle(aimage)
}
}
main();
image.initOpenCV 初始化OpenCV
- 初始化OPENCV 类库
- 如果使用找图请先调用这个函数,第一次初始化需要复制类库,时间可能较长 ,以后再次执行就很快
- @return 布尔型 true 代表成功 false代表失败
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
sleep(1000)
let d = image.initOpenCV();
logd(d)
}
main();
image.findImage 找图
- 找图。在大图片image中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- @param image 大图片
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param weakThreshold 弱阈值。该值用于在每一轮模板匹配中检验是否继续匹配。如果相似度小于该值,则不再继续匹配。取值范围为0~ 1的浮点数。默认值为0.7。
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法
- @return Rect 区域坐标对象数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
let d = image.initOpenCV();
logd(d)
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//从工程目录下res文件夹下读取sms.png文件
let sms = readResAutoImage("sms.png");
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImage(aimage, sms, 0, 0, 0, 0, 0.7, 0.9, 21, 5);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
logd("相似度: " + points[i]['similarity'])
let x = parseInt((points[i].left + points[i].right) / 2)
let y = parseInt((points[i].top + points[i].bottom) / 2)
//点击坐标
clickPoint(x, y)
}
}
//图片要回收
image.recycle(aimage)
}
//图片要回收
image.recycle(sms)
}
main();
image.findImageJ 找图(JSON)
- 找图。在大图片image中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- @param image1 大图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json, 小图路径请到json文件配置
- @return
{null|Rect[]}
区域坐标对象数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
let d = image.initOpenCV();
logd(d)
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImageJ(aimage, "a.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
logd("相似度: " + points[i]['similarity'])
let x = parseInt((points[i].left + points[i].right) / 2)
let y = parseInt((points[i].top + points[i].bottom) / 2)
//点击坐标
clickPoint(x, y)
}
}
//图片要回收
image.recycle(aimage)
}
}
main();
image.findImage2 找图
- 找图。在大图片image中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- 注意: 自带含缩放功能
- EC 鸿蒙Next 1.0.0+
- @param image1 大图片
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @param weakThreshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法
- @return Rect 区域坐标对象数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
let d = image.initOpenCV();
logd(d)
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//从工程目录下res文件夹下读取sms.png文件
let sms = readResAutoImage("sms.png");
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImage2(aimage, sms, 0, 0, 0, 0, 0.7, 0.9, 21, 5);
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
logd("相似度: " + points[i]['similarity'])
let x = parseInt((points[i].left + points[i].right) / 2)
let y = parseInt((points[i].top + points[i].bottom) / 2)
//点击坐标
clickPoint(x, y)
}
}
//图片要回收
image.recycle(aimage)
}
//图片要回收
image.recycle(sms)
}
main();
image.findImage2J 找图(JSON)
- 找图。在大图片image中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- @param image1 大图片
- @param jsonFileName 使用图色工具生成JSON文件,存储到res文件夹中,例如 a.json, 小图路径请到json文件配置
- @return
{null|Rect[]}
区域坐标对象数组或者null
function main() {
let req = startEnv();
if (!req) {
logd("申请权限失败");
return;
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
//抓取屏幕
let aimage = image.captureFullScreen();
logd("aimage " + aimage);
if (aimage != null) {
//在图片中查找
let points = image.findImage2J(aimage, "a.json");
logd("points " + JSON.stringify(points));
//这玩意是个数组
if (points && points.length > 0) {
for (let i = 0; i < points.length; i++) {
logd(points[i])
logd("相似度: " + points[i]['similarity'])
let x = parseInt((points[i].left + points[i].right) / 2)
let y = parseInt((points[i].top + points[i].bottom) / 2)
//点击坐标
clickPoint(x, y)
}
}
image.recycle(aimage)
}
}
main();