图像模块
分类:图像处理
函数:image.filter() 图像颜色过滤
原函数名 : imageFilter
函数说明 : 按指定颜色对图片进行二值化处理。
函数方法 : image.filter(图像路径 path, 颜色数组 colors, 精度 fuzzy?);
返回值 : 无
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
path | string | 图片路径, 支持BMP,JPG,PNG格式 | 必填 |
colors | table | 颜色列表 | 必填 |
fuzzy | number | 精度,范围 0 - 100 | 非必填,默认100 |
示例
function main()
f = "/var/touchelf/a.png"
screen.snapshot(f)
image.filter(f,{0x007AFF}, 80)
end
示例:匹配多个颜色并配合本地ocr函数实现文字识别
function main()
f = "/var/touchelf/a.png"
screen.snapshot(f)
image.filter(f,{0x007AFF, 0xFFFFFF, 0xFF7AFF}, 80)
code, info = ocr.tess.ocrEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"chi_sim", -- 语言类型为英文
"", -- 白名单为空
f); -- 图片地址
if code == "" then
sys.dialog("识别失败")
else
sys.dialog(string.format("识别成功: %s", code))
sys.log(info)
end
end
注意:二值化后的图片会覆盖原图.
示例: 配合本地ocr功能实现找字并返回坐标
function main()
x,y = findText("触摸精灵", {0xFFFFFF})
sys.log(x..","..y)
end
function findText(str, color)
local f = "/var/touchelf/a.jpg"
screen.snapshot(f)
image.filter(f,color, 70)
code, info = ocr.tess.ocrEx("/var/touchelf/tessdata", -- 语言包tessdata目录在设备中的路径
"chi_sim", -- 语言类型为中文
"", -- 白名单为空
f); -- 图片地址
if code == "" then
return -1, -1
else
if string.find(code,str) then
local index = 1
local t = {}
for k, v in pairs(info) do
if v.char == str:sub((index-1) * 3 + 1, (index-1) * 3 + 1 + 2) then
if index == 1 then
t = v
end
if index == string.len(str) / 3 then
return t.x, t.y
else
index = index + 1
end
else
index = 1
end
end
return -1, -1
else
return -1, -1
end
end
end
以上示例返回:43,186
使用图片:
二值化以后的图片:
函数:image.binarization() 图像二值化
原函数名 : imageBinarization
函数说明 : 按指定阈值对图片进行二值化处理。
函数方法 : image.binarization(图像路径 path, 阈值 threshold);
返回值 : 无
参数 | 类型 | 说明 |
---|---|---|
path | string | 图片路径, 支持BMP,JPG,PNG格式 |
threshold | number | 二值化阈值,范围 0 - 255,作为图像二值化的参照值。 |
示例
function main()
f = "/var/touchelf/a.jpg"
screen.snapshot(f)
image.binarization(f, 100)
end
注意:二值化后的图片会覆盖原图.
函数:image.resize() 图像缩放
原函数名 : imageResize
函数说明 : 指定宽高对图片缩放。
函数方法 : image.resize(图像路径 path, 宽 width, 高 height);
返回值 : 无
参数 | 类型 | 说明 |
---|---|---|
path | string | 图片路径, 支持BMP,JPG,PNG格式 |
width | number | 宽度 |
height | number | 高度 |
示例
function main()
f = "/var/touchelf/a.jpg"
image.resize(f, 100, 100)
end
注意:缩放后的图片会覆盖原图.
函数:image.resolution() 获取图像分辨率
函数说明 : 获取指定图像分辨率。
函数方法 : image.resolution(图像路径 path);
返回值 : 整数型 width,height
参数 | 类型 | 说明 |
---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 |
返回值 | 类型 | 说明 |
---|---|---|
width | number | 获取到的指定图像宽度 |
height | number | 获取到的指定图像高度 |
示例
width, height = image.resolution("/var/touchelf/a.png"); -- 将图像宽度和高度分别保存在变量width、height中
sys.dialog(string.format("%d,%d\n", width, height)); -- 将宽度和高度用提示框显示到屏幕上
函数:image.rotate() 图像旋转
函数说明 : 图像旋转
函数方法 : image.rotate(图像路径 path, 旋转角度 deg);
返回值 : 无
参数 | 类型 | 说明 |
---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 |
deg | number | 旋转角度 |
0: 保持图像不变。
90: 图像向右转90度。
-90: 图像向左转90度。
180: 图像倒立。
示例
image.rotate("/var/touchelf/a.png",90); -- 图像向右旋转90度.
注意:旋转后的图片会覆盖原图.
函数:image.keep() 图像缓存
函数说明 : 开启/关闭图像缓存。受影响函数"image.getColor","image.getColorRGB","image.findColor","image.findImage"
函数方法 : image.keep(是否保持 on);
返回值 : 无
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
on | boolean | 开启/关闭图像缓存 | 必填 |
开启图片缓存后,如果第一个路径参数和上次调用一致则不会重新加载图像文件.
示例:
function main()
path = "/var/touchelf/a.png"
screen.snapshot(path)
start = os.time()
-- 启动图像缓存
image.keep(true)
for i = 1, 100 do
image.getColor(path, 100, 100) -- path和上次一致时不重新读取文件
end
image.keep(false) -- 关闭图像缓存, 后续每次都重新读取文件
sys.log(os.time() - start)
end
可在脚本开始时开启图像缓存,当有图片更新后重新开关缓存
示例:
function main()
path = "/var/touchelf/a.png"
image.keep(true) -- 启用缓存
c1 = image.getColor(path, 100, 100)
sys.log(c1)
screen.snapshot(path)
image.keep(false)
image.keep(true)
c2 = image.getColor(path, 100, 100)
sys.log(c2)
end
函数:image.getColor() 图像取色
函数说明 : 获取图像指定像素的颜色
函数方法 : image.getColor(图像路径 path,坐标X, 坐标Y);
返回值 : 整型 color
参数 | 类型 | 说明 |
---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 |
X | number | 将获取颜色值的X坐标 |
Y | number | 将获取颜色值的y坐标 |
返回值 | 类型 | 说明 |
---|---|---|
color | number | x,y坐标点的十进制颜色值 |
示例:
c = image.getColor("/var/touchelf/a.png", 100, 100); -- 将坐标为(100,100)的点的颜色保存在变量c中
sys.log(string.format("%X",c)) -- 将获取的颜色以16进制输出到日志中
函数:image.getColorRGB() 图像取色RGB
函数说明 : 获取图像指定像素颜色的R、G、B三个值
函数方法 : image.getColorRGB(path,坐标X, 坐标Y);
返回值 : 整型 R,G,B
参数 | 类型 | 说明 |
---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 |
X | number | 将获取颜色值的X坐标 |
Y | number | 将获取颜色值的Y坐标 |
返回值 | 类型 | 说明 |
---|---|---|
R | number | x,y坐标点的颜色R(红色)值 |
G | number | x,y坐标点的颜色G(绿色)值 |
B | number | x,y坐标点的颜色B(蓝色)值 |
示例:
r, g, b = image.getColorRGB("/var/touchelf/a.png", 100, 100); -- 将坐标为(100,100)的点的颜色的R、G、B分别保存在变量r、g、b中
sys.log(string.format("R%XG%XB%X",r, g, b)) -- 将获取的颜色以16进制输出到日志中
函数:image.findColor() 图像找色
函数说明 : 寻找图像内符合指定颜色的坐标。
函数方法 : image.findColor(图像路径 path,颜色数组 colors, 精度 fuzzy?, 左上角坐标x?, 左上角坐标y?, 右下角坐标x?, 右下角坐标y?, 返回类型all?);
返回值 : 整数型 x, y
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 | 必填 |
colors | table | 要找的颜色数组 | 必填 |
fuzzy | number | 精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配 | 非必填,默认100 |
ltx | number | 欲寻找的区域左上角的X坐标 | 非必填,默认全屏 |
lty | number | 欲寻找的区域左上角的Y坐标 | 非必填,默认全屏 |
rbx | number | 欲寻找的区域右下角的X坐标 | 非必填,默认全屏 |
rby | number | 欲寻找的区域右下角的Y坐标 | 非必填,默认全屏 |
all | boolean | 是否返回所有符合条件的坐标 | 非必填,默认返回第一个坐标 |
返回值 | 类型 | 说明 |
---|---|---|
x | 整数型 | 找到的坐标X值,未找到返回 -1 |
y | 整数型 | 找到的坐标Y值,未找到返回 -1 |
all为true的返回值 | 类型 | 说明 |
---|---|---|
table | table | 范围内找到的坐标table,未找到返回 {} 空数组 |
全图像找色示例
x, y = image.findColor("/var/touchelf/a.png",{0x0000ff}); -- 在全图像范围找到第一个颜色为0x0000ff的点, 将其坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
全图像模糊找色示例
x, y = image.findColor("/var/touchelf/a.png",{0x0000ff}, 90); -- 在全图像范围找到第一个颜色为0x0000ff的点, 精确度为90%, 将其坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
单点模糊找色示例
x, y = image.findColor("/var/touchelf/a.png",{0x0000ff}, 90, 100, 100, 100, 100); -- 将左上角和右下角两个坐标写成一样,作用就是判断(100,100)这个坐标颜色是否为0x0000ff, 精确度为90%, 将其坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
区域模糊找色示例
x, y = image.findColor("/var/touchelf/a.png",{0x0000ff}, 90, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个颜色为0x0000ff的点, 精确度为90%, 将其坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
多点区域模糊找色示例
-- 在区域[(10,10)(200,200)]范围内以90%的精确度找一个满足以下条件的点:
-- 1. 其颜色为0x0000ff
-- 2. 其X坐标+10,Y坐标+20的坐标上的点颜色为0x00ff00
-- 3. 其X坐标-10,Y坐标-20的坐标上的点颜色为0xff0000
x, y = image.findColor("/var/touchelf/a.png",{0x0000ff, 10, 20, 0x00ff00, -10, -20, 0xff0000}, 90, 10, 10, 200, 200);
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
多点区域模糊找色返回所有坐标示例
function main()
t = image.findColor("/var/touchelf/a.png",{0xEB78E6, 1, 0, 0xF09CE9, 2, 4, 0x6C1771, 2, 6, 0x4B1956},80,100, 100, 500, 500, true)
sys.log(t)
end
返回的 table 格式:
table = { {
x = 394,
y = 397
}, {
x = 488,
y = 404
}, {
x = 488,
y = 713
} }
函数:image.findImage() 图像找图
函数说明 : 图像内寻找符合指定图案,返回左上角坐标。
函数方法 : image.findImage(图像路径 path, 图像路径 path, 精度 fuzzy?, 左上角坐标x?, 左上角坐标y?, 右下角坐标x?, 右下角坐标y?, 透明色trans?);
返回值 : 整数型 x, y
参数 | 类型 | 说明 | 必填 |
---|---|---|---|
path | string | 图像路径, 支持BMP,JPG,PNG格式 | 必填 |
path | string | 要找的图片的路径 | 必填 |
fuzzy | number | 精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配 | 非必填,默认100 |
ltx | number | 欲寻找的区域左上角的X坐标 | 非必填,默认全屏 |
lty | number | 欲寻找的区域左上角的Y坐标 | 非必填,默认全屏 |
rbx | number | 欲寻找的区域右下角的X坐标 | 非必填,默认全屏 |
rby | number | 欲寻找的区域右下角的Y坐标 | 非必填,默认全屏 |
trans | number | 指定图片中透明颜色 | 非必填 |
返回值 | 类型 | 说明 |
---|---|---|
x | number | 找到的坐标X值,未找到返回 -1 |
y | number | 找到的坐标Y值,未找到返回 -1 |
全图找图示例
x, y = image.findImage("/var/touchelf/a.png","/var/touchelf/b.png");
-- 在图像"/var/touchelf/a.png"内查找路径为"/var/touchelf/b.png"的图片, 找到后将其左上角坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
全屏模糊找图示例
x, y = image.findImage("/var/touchelf/a.png",,"/var/touchelf/b.png", 90);
-- 在图像"/var/touchelf/a.png"内查找路径为"/var/touchelf/b.png"的图片, 精确度为90, 找到后将其左上角坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
区域模糊找图示例
x, y = image.findImage("/var/touchelf/a.png","/var/touchelf/b.png", 90, 100, 100, 200, 200, 0x000000);
-- 在图像"/var/touchelf/a.png"内区域[(100,100)(200,200)]内查找路径为"/var/touchelf/b.png"的图片, 精确度为90, 忽略图片中颜色为0x000000(黑色)的点, 找到后将其左上角坐标保存到变量x和y中
if x ~= -1 and y ~= -1 then -- 如果找到了
sys.log(string.format("x=%s,y=%s",x,y))
else
sys.log("未找到")
end
分类:二维码
函数:image.qr.encode 二维码编码
原函数名 :
函数说明 : 将文本编译成二维码图片。
函数方法 : image.qr.encode(文本型 path, 文本型 text, 整数型 size);
返回值 : 无
参数 | 类型 | 说明 |
---|---|---|
path | 文本型 | 图片路径, 支持BMP,JPG,PNG格式 |
text | 文本型 | 二维码内容 |
size | 整数型 | 二维码尺寸 |
示例
function main()
f = "/var/touchelf/a.jpg"
image.qr.encode(f, "http://www.touchelf.com", 200)
end
函数:image.qr.decode 二维码解码
函数说明 : 将二维码图片解析为字符串.
函数方法 : image.qr.decode(文本型 path);
返回值 : 文本型 text
参数 | 类型 | 说明 |
---|---|---|
path | 文本型 | 图片路径, 支持BMP,JPG,PNG格式 |
返回值 | 类型 | 说明 |
---|---|---|
text | 文本型 | 解析二维码得到的字符串 |
示例
function main()
f = "/var/touchelf/a.jpg"
text = image.qr.decode(f)
sys.log(text)
end