图像模块

分类:图像处理

函数:image.filter() 图像颜色过滤

原函数名 : imageFilter
函数说明 : 按指定颜色对图片进行二值化处理。
函数方法 : image.filter(图像路径 path, 颜色数组 colors, 精度 fuzzy?);
返回值 : 无

参数类型说明必填
pathstring图片路径, 支持BMP,JPG,PNG格式必填
colorstable颜色列表必填
fuzzynumber精度,范围 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
使用图片:
b.jpg
二值化以后的图片:
a.jpg

函数:image.binarization() 图像二值化

原函数名 : imageBinarization
函数说明 : 按指定阈值对图片进行二值化处理。
函数方法 : image.binarization(图像路径 path, 阈值 threshold);
返回值 : 无

参数类型说明
pathstring图片路径, 支持BMP,JPG,PNG格式
thresholdnumber二值化阈值,范围 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);
返回值 : 无

参数类型说明
pathstring图片路径, 支持BMP,JPG,PNG格式
widthnumber宽度
heightnumber高度

示例

function main()
    f = "/var/touchelf/a.jpg"
    image.resize(f, 100, 100)
end
注意:缩放后的图片会覆盖原图.

函数:image.resolution() 获取图像分辨率

函数说明 : 获取指定图像分辨率。
函数方法 : image.resolution(图像路径 path);
返回值 : 整数型 width,height

参数类型说明
pathstring图像路径, 支持BMP,JPG,PNG格式
返回值类型说明
widthnumber获取到的指定图像宽度
heightnumber获取到的指定图像高度

示例

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);
返回值 : 无

参数类型说明
pathstring图像路径, 支持BMP,JPG,PNG格式
degnumber旋转角度
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);
返回值 : 无

参数类型说明必填
onboolean开启/关闭图像缓存必填
开启图片缓存后,如果第一个路径参数和上次调用一致则不会重新加载图像文件.

示例:

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

参数类型说明
pathstring图像路径, 支持BMP,JPG,PNG格式
number将获取颜色值的X坐标
number将获取颜色值的y坐标
返回值类型说明
colornumberx,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

参数类型说明
pathstring图像路径, 支持BMP,JPG,PNG格式
number将获取颜色值的X坐标
number将获取颜色值的Y坐标
返回值类型说明
Rnumberx,y坐标点的颜色R(红色)值
Gnumberx,y坐标点的颜色G(绿色)值
Bnumberx,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

参数类型说明必填
pathstring图像路径, 支持BMP,JPG,PNG格式必填
colorstable要找的颜色数组必填
fuzzynumber精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配非必填,默认100
ltxnumber欲寻找的区域左上角的X坐标非必填,默认全屏
ltynumber欲寻找的区域左上角的Y坐标非必填,默认全屏
rbxnumber欲寻找的区域右下角的X坐标非必填,默认全屏
rbynumber欲寻找的区域右下角的Y坐标非必填,默认全屏
allboolean是否返回所有符合条件的坐标非必填,默认返回第一个坐标
返回值类型说明
x整数型找到的坐标X值,未找到返回 -1
y整数型找到的坐标Y值,未找到返回 -1
all为true的返回值类型说明
tabletable范围内找到的坐标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

参数类型说明必填
pathstring图像路径, 支持BMP,JPG,PNG格式必填
pathstring要找的图片的路径必填
fuzzynumber精度,范围:1 ~ 100,数值越大精度越高,100为完全匹配非必填,默认100
ltxnumber欲寻找的区域左上角的X坐标非必填,默认全屏
ltynumber欲寻找的区域左上角的Y坐标非必填,默认全屏
rbxnumber欲寻找的区域右下角的X坐标非必填,默认全屏
rbynumber欲寻找的区域右下角的Y坐标非必填,默认全屏
transnumber指定图片中透明颜色非必填
返回值类型说明
xnumber找到的坐标X值,未找到返回 -1
ynumber找到的坐标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