颜色对象是一个userdata类型的变量,可以使用下面的函数来创建新的颜色对象。
img = image.new()
img = image();
创建空的图片对象。
img = image.new(width,height,bpp)
img = image(width,height,bpp);
参数分别为图片宽,图片高,图片位数。最后一个参数可以省略(默认bpp值为24)。
img = image.new(filename)
img = image(filename)
从指定的路径载入新的图片对象。例:
img2 = image.new(img)
img2 = image(img)
拷贝新的图片对象。
image.del(img)
立即删除img对象。并不会删除img这个变量(img指向无效的图片对象)。
img = nil;
立即删除img变量,等待垃圾收集器删除img引用的图片对象。
image.load(img,filename)
img:load(filename)
读取图片文件,filename参数指定图片路径。
成功返回true,失败返回false。
image.save(img,filename)
img:save(filename)
保存图片文件,filename参数指定图片路径。
成功返回true,失败返回false。
image.setClipBD(img)
img:setClipBD()
把图片发送到剪贴板
image.getClipBD(img)
img:getClipBD()
从剪贴板读取图像
image.getURL(img,"网址","*.默认后缀名")
img:getURL("网址","*.默认后缀名")?
第一个参数指定网址,如果网址中包含正确的图片后缀名,那么第二个参数可以省略。
例:
image.capture(img,hwnd,x,y,cx,cy)
img:capture(hwnd,x,y,cx,cy)
快速抓屏,hwnd 指定窗口句柄,如果为0指定桌面窗口。
x,y指定左上角坐标,cx,cy指定宽、高 ,如果都为零都抓取整个窗口的图像。
省略全部抓屏参数,使用 img:capture() 则抓取全屏图像。
image.captureX(img,hwnd,x,y,cx,cy)
img:captureX(hwnd,x,y,cx,cy)
用法与image.capture相同,抓屏速度较慢。
ok = image.ok(img)
ok = img:ok()
检测图片是否有效,有效返回true,无效返回false。
x,y = image.size(img)
x,y = img:size()
返回图片大小。
x,y = image.size(img,cx,cy)
img:size(cx,cy)
重新设置图片大小(放大或缩小)。
image.Crop(img, x,y,x2,y2 )
img:Crop( x,y,x2,y2 )
参数指定一个矩形的左(x),上(y),右(x2),下(y2)坐标,并沿矩形区域修剪图片。
num = image.bpp(img,0)
num = img:bpp(0)
返回图片位深度
image.bpp(img,num)
img:bpp(num)
设置图片位深度。 可指定以下值 1(黑白) 4(16色) 8(256色) 24(真彩色)。
image.median(img,r)
img:median(r)
中值滤波(去杂点),参数r指定半径。
这个函数在识别验证码的时候有用,较小的图片会被严重破坏,但是可以有效的得到特征点。
例: img:median(3);
image.repair(img,r,n )
img:repair( r, n)
修复被破坏的图片,第一个参数r为修复半径,第二个参数n指定修复的次数。
例:img:repair( 0.25, 2);
1、显示指定行列平均分割
例:
2、仅指定一个参数并且参数为字符串值,按颜色通道分离(图片大小不变,可用于去杂色、杂点)
img2,img3,img4 = img:split("RGB")
img2,img3,img4,img5 = img:split("CMYK")
img2,img3,img4 = img:split("HSL")
img2,img3,img4 = img:split("XYZ")
img2,img3,img4 = img:split("YIQ")
img2,img3,img4 = img:split("YUV")
3、仅指定一个参数并且参数为数字值,自动分割(仅适用于单色图片),
例如:img:split(8) 其中8指定杂点系数,杂点越多,杂点系数就应当设置的较大。
必须反复测试找到正确的杂点系数,否则分割的效果不好。
image.mix(img,img2,mode,x,y)
img:mix(img2,mode,x,y)
混合两张图片,mode参数指定混合模式,参数x,y指定偏移坐标。
下面是一个完整的例子:
num = image.getPos(img,x,y)
num = img:getPos( x,y)
x,y指定图片坐标,返回图片指定坐标的颜色数字值.
image.setPos(img, x, y, num )
img:setPos(x,y, num)
x,y指定图片坐标,设置图片指定坐标的颜色数字值.
image.findColor(img,cl,x,y,x2,y2)
img:findColor(cl,x,y,x2,y2)
在图像上搜索指定颜色的点。
其中cl指定颜色,可以是color对象,或者数字值,或者形如"#FFFFFF"的字符串表达式
下面是一个例子,实现同样的功能,就比color.find快了近十倍。
img=image.new();--创建图象
img:capture();--抓屏
img:bpp(8); --可以通过bpp函数求近似色
cl = color("#FFFFFF");
cl:bpp(8); --可以通过bpp函数求近似色
x,y =img:findColor(cl,0,0,1024,768);
--win.consoleOpen()
mouse.setPos(x,y,true); --移动鼠标到指定位置
print(x,y);
str = image.getBits(img,row)
str = img:getBits(row)
参数row指定行号,row等于1为第一行。
读取图片指定行的二进制数据。
例:
image.setBits(img,row,str)
img:setBits(row,str)
参数row指定行号,row等于1为第一行。
设置图片指定行的二进制数据。
下面是一个例子:
str = image.getBytes(img,"*.后缀名")
str = img:getBytes("*.后缀名")
读取图片的二进制数据,参数指定后缀名。
image.setBytes(img,str ,"*.后缀名")
img:setBytes(str,"*.后缀名");
将二进制数据还原为图片对象。
最后一个参数指定后缀名,必须与调用image.getBytes时使用的后缀名相同。
image.test(img,img2)
img:test(img2)
比较图像 0 < 返回差异值 < (img面积 + img2面积)
image.test返回图像差异值,完全相似返回0 完全不相似为两个图片的面积相加。
image.test比较速度最快,可以比较任意图片(不要求大小相同),但是精确匹配能力一般,模糊识别的能力较强。
不适合用于图文识别。
image.testX(img,img2)
img:testX(img2)
比较图像 0 < 返回差异值 < 1
image.testX返回差异值,完全一样为0,完全不一样为1,通常返回的是1到0之间的小数,数字越小表示两个图片越接近相似。
image.testX速度较慢,适合比较较大的图片(不要求大小相同),精确匹配能力较差,模糊识别的能力一般。
适用于图文识别。
image.testXX(img,img2)
img:testXX(img2)
比较图像 0 < 返回差异值 < img面积
image.testXX返回相似度,完全一样为0,完全相似返回0 完全不相似为单个图片的面积。
image.testXX速度一般,适合比较小图片(要求两张图片大小相同),精确匹配能力最强,模糊识别的能力最差。
适用于图文识别。
以上的三个函数都返回一个值,表示两个图像的差异度(就是两个图像不相同的比率,即"相似度"的反义词)
这三个函数,最小值都是相同的,都是 0 ,(差异度等于0,表示两个图片完全相似,即相似度为百分之百)
而他们的最大值是不同的,参考上面的说明。
image.find(img,img2,x,y,x2,y2,step)
x,y,sm = img:find(img2,x,y,x2,y2,step)
img是要查找的图像,img2参数是屏幕图像,在img2里面查找img。
参数x,y,x2,y2指定要查找的范围,x、y为左上角坐标,x2、y2为右下角坐标。
step参数指定步进。
返回值x,y 为找到的坐标,sm为相似度,为0到100之间的值,100为完全相似,0为完全不相似
img:find()函数与“模拟区块--抓图移动”的功能类似,参数也类似。 .
除了img2以外,其他的参数可以忽略:
x,y,sm = img:find(img2,0,0,0,0,5)
img:find(img2) --查找范围为img2的大小
img:find(img2,0,0)
img:find(img2,0,0,0,0)
img:find(img2,0,0,0,0,5)
--以上的写法都是正确的。
image.paint(img,x,y,cx,cy )
img:paint(x,y,cx,cy )
在屏幕上显示图像,参数分别为左坐标(x),上坐标(y),宽(cx),高(cy)。
ok,x,y = image.fromHICO(img,hicon,mode)
ok,x,y = img:fromHICO(hicon,mode)
hicon指定图标句柄,第二个参数设置转换选项(这是可选参数,可以省略)
返回值ok表示转换是否成功,x,y为指针类图标热区偏移值。
mode参数可选项如下:
ok,x,y = img:fromHICO(hico); --返回图标
ok,x,y = img:fromHICO(hico,1); --返回外观图案
ok,x,y = img:fromHICO(hico,2); --返回掩码图
image.fromHBMP(img,hbmp,bpp)
img:fromHBMP(hbmp,bpp)
hbmp指定位图句柄,bpp参数指定颜色位数(这是可选参数,可以省略)