本期主题:介绍目前手机按键(按键精灵安卓版)在编写脚本中,都需要用到哪些方式进行图色识别。
惯例先讲好处:

1、找色,如何计算颜色相似度,解决不同款式手机中画面颜色差异的问题。
2、找图,不太推荐,我们来聊聊多点找色,解决找图缓慢不效率,判断不准确的问题。


科普小技巧:关于多点取色如何获取点阵特征(注意手机按键使用,多点找色取点不宜超过10个),请查看以下帖子
按键精灵(PC版):插件教学之《Color插件的多点找色原理介绍》
从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》


正题一:找色,先介绍下手机按键自带的找色命令。


固定坐标获取单点颜色
注解:获取坐标X与Y位置的颜色值信息,返回存入变量col中。

  1. Dim col,x,y
  2. col=GetPixelColor(x,y)
  3. TracePrint "颜色=" & col

复制代码

区域范围查找单点颜色
注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下面一行的注释。
如果没有找到,intX和intY的值都会被置为-1,那么这里我们只需要判断一个值就可以确认是否找到。

  1. Dim intX, intY
    FindColor 0, 0, 720, 1280, "0000FF", 0, 0.9, intX, intY
    //如果没有找到,intX和intY的值都会被置为-1,那么这里我们只需要判断一个值就可以确认是否找到。
    If intX > 0 Then
    //如果intX大于0,说明找颜色,IntX与IntY分别表示这颜色的位置坐标
    TracePrint "找到颜色,坐标=" & intX & "," & intY
    Else
    //否则
    TracePrint "没找到颜色"
    End If

复制代码

要点讲解:如何判断两个颜色相似度,以便解决单点颜色判断上的误差问题,以下提供两个写好的函数模块给大家学习。


函数名称:IsCol
函数功能:通过计算16进制颜色值中的RGB平均差值,得出两个颜色值相似度是否到达对应百分比
函数参数:
参数1:字符串型,16进制颜色值
参数2:字符串型,16进制颜色值
参数3:整数型,相似度
返回值:True 或 False(符合或不符合)
函数范例:

  1. '判断两个16进制值相似度是否到达对应百分比
    Function IsCol(col1,col2,n)
    IsCol=False
    Dim r1,g1,b1
    Dim r2,g2,b2
    ColorToRGB col1,r1,g1,b1
    ColorToRGB col2,r2,g2,b2
    If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True
    End Function

复制代码

函数名称:CmpCol
函数功能:获取固定坐标点16进制颜色值,传入IsCol函数进行相似度对比,得出两个颜色值相似度是否到达对应百分比
函数参数:
参数1:整数型,屏幕X坐标
参数2:整数型,屏幕Y坐标
参数3:字符串型,16进制颜色值
返回值:True 或 False(符合或不符合)

  1. '固定坐标单点模糊找色
    Function CmpCol(x,y,col,n)
    CmpCol=False
    If x < 0 or y < 0 Then Exit Function
    Dim temp_col
    temp_col=GetPixelColor(x,y)
    If temp_col=col Then
    CmpCol=True
    Else
    CmpCol=IsCol(col,temp_col,n)
    End If
    End Function
    复制代码

1.5.1新增命令介绍


函数名称:CmpColor
函数功能:比较指定坐标点(x,y)的颜色,支持多色、偏色、相似度比较
函数参数:
参数1:整数型,屏幕X坐标
参数2:整数型,屏幕Y坐标
参数3:字符串型,16进制颜色值
参数4:整数型,颜色相似度(推荐0.9)
返回值:整数型,没找到返回-1,找到返回对应颜色序号,从0开始
调用范例:

  1. Dim ret
    ret = CmpColor(100,200,"FFFFFF|0000FF-000000|00FF00-101010",0.9)
    If ret = -1 Then
    TracePrint "颜色都不相等"
    Else
    TracePrint "匹配颜色的序号为:" & ret
    End if

复制代码

批注:
如果(100,200)的颜色是FFFFFF,则返回0
如果(100,200)的颜色是0000FF,则返回1
如果(100,200)的颜色是00FF00或偏色在101010范围内,则返回2
以此类推


正题二:找图?不不,我是来推荐多点找色的,惯例先介绍下自带的找图命令。


区域范围查找图片
注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下面一行的注释。
如果没有找到,intX和intY的值都会被置为-1,那么这里我们只需要判断一个值就可以确认是否找到。
附件路径(Attachment:),由于各自手机文件路径各不相同,这里我还是推荐用附件路径吧,就下面例子这样。(提示:找图默认支持PNG格式,但也支持BMP格式)

1.5语法(增加偏色参数)
  1. Dim intX, intY
  2. FindPic 0, 0, 0, 0, "Attachment:图片名称.png", "000000", 0, 0.9, intX, intY
  3. If intX > 0 Then
  4. //如果intX大于0,说明找颜色,IntX与IntY分别表示这颜色的位置坐标
  5. TracePrint "找到图片,图片左上角点位置坐标:" & intX & "," & intY
  6. Else
  7. //否则
  8. TracePrint "找图失败"
  9. End If

复制代码

1.3语法
  1. Dim intX, intY
  2. FindPic 0, 0, 0, 0, "Attachment:图片名称.png", 0, 0.9, intX, intY
  3. If intX > 0 Then
  4. //如果intX大于0,说明找颜色,IntX与IntY分别表示这颜色的位置坐标
  5. TracePrint "找到图片,图片左上角点位置坐标:" & intX & "," & intY
  6. Else
  7. //否则
  8. TracePrint "找图失败"
  9. End If

复制代码

要点讲解:如何提高一个图像识别的效率与精确度。


首先想提高图像判断效率,那么我们得知道找图的原理方式,这样才能从中了解时间都耗到哪里去了,都做了什么,是否有什么方式可以减少时间,减少不必要的操作以达到节约时间又不影响图像判断结果。
简单分析:
1、确认找图都有什么步骤。
2、通过哪些步骤配合得到结果。
3、在不影响结果的情况下去除不必要的步骤以达到节约时间的目的,提高效率。


找图原理大致方式:(我这里以简单通俗的方式描述下找图原理,可能与真实原理有些出路,请大家无视)
第一步:全屏获取图色信息,获取整个屏幕所有像素点的颜色信息,临时保存。
第二步:
1、取要找的图片左上角第一个点颜色,进行范围查找单色,找到则临时记录那点坐标。
2、以该点为起点,对图片剩余部分全部像素点的颜色信息进行匹配判断,如果都相同,则说明这张图片找到,返回值起点坐标X与Y的值。
3、如果不是则继续循环扫描剩余部分,继续找符合第一点颜色的位置作为起点继续匹配,直到匹配正确或返回 -1,-1表示没有符合特征。
第三步:释放掉第一步临时保存的图色信息。(释放内存占用)


以上步骤了解,我们可以明确,时间都耗在整张图片全部点阵的匹配上了。
试想下,一张10*10的图片,每次找到起点,都必须进行100次的信息对比,如果在720*1280范围找图,再没找到匹配正确的图片时,前面疑似的部分每个起点都需要进行100次的信息对比,这样整体时间就消耗掉了。


那么:问大家一个简单的问题,判断一张图片是否存在的目的是什么,是否是判断图像中某个图像特征是否存在,比如某个图标?某个文字?某个符号?总的描述,就是几个颜色点,按照对应的形状排列起来的特征。
既然:找图的目的只是判断里面其中一小部分图色信息是否匹配,那么我们为何要把整张图片进行匹配呢?
结论:这里我们分析总结,我们其实只要确认一个范围内少部分颜色点的排列特征形状颜色是否匹配。


通俗点比喻:把找图找色比喻为去仓库取物。

单独执行找图 或 单独执行找色。 仓库取物。
全屏截图保存内存中 打开仓库大门
对获取到的信息进行匹配,取出符合条件的信息。 进入仓库搜索制定物品搬出。
释放内存中临时储存信息。 关闭仓库大门。
总结:如果我需要对当前屏幕画面做一百次或更多次找图或取色,直接调用会导致每次执行取色匹配时对全屏图像进行临时储存,判断,再释放,再记录再释放,增加额外不必要的资源消耗,等于去仓库取100个物品,需要开关一百次大门,完全无意义,以下代码中用到KeepCapture与ReleaseCapture命令的作用就是事先把大门一直开着,直到我取完物品,再关闭。

总结:也许我以上墨迹可能许多新同学暂时还无法理解完全,但没关系,你们只要最后知道多点找色比找图高效精确即可。


不啰嗦了,以下直接把目前常用的函数模块发出来,只想有功能用的同学可以 Ctrl+C → Ctrl+V 完事,想了解具体原理并学习知识的可以细细品读!有描述不当之处可以跟帖留言或各大按键群里给我留言。


(本人联系方式按键各大群)


函数名称:CmpMultiCol
函数功能:固定坐标多点模糊找色
函数参数:
参数1:整数型,屏幕X坐标
参数2:整数型,屏幕Y坐标
参数3:字符串型,第一点16进制颜色值
参数4:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
参数5:整数型,颜色相似度(推荐0.9)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)
注意事项:由于需要对一张图像中做大量的信息对比来匹配出屏幕范围中是否有需要的多点特征,所以这里提示必须调用开头加入KeepCapture命令,结束时ReleaseCapture释放掉。


调用范例:如果需要对一张图像做多次图色判断可以用这种调用方式拆开使用,节省资源。

  1. '加载当前屏幕画面信息
    KeepCapture
    '调用多点找色命令,判断该特征是否存在区域范围中
    If CmpMultiCol(10,10,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then
    '说明找到
    TracePrint "找到,第一个点坐标:" & IntX & "," & IntY
    Else
    '否则
    TracePrint "没有找到"
    End If
    '释放上次画面加载信息,以免对干扰后面找色命令
    ReleaseCapture

复制代码

函数模块:

  1. '固定坐标多点模糊找色
    Function CmpMultiCol(x,y,col,str,n)
    CmpMultiCol=False
    IntX=x
    IntY=y
    If CmpCol(x,y,col,n)=True Then
    '第一个点颜色符合,调用MultiColor多点处理模块匹配其余点的颜色是否正确
    CmpMultiCol=MultiColor(x,y,str,n)
    Else
    '第一个点颜色不符,调用FindMultiCol多点找色模块,对该点再次进行一次小范围多点找色查找
    CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)
    End If
    End Function

复制代码

原理解析:待编辑


函数名称:FindMultiCol
函数功能:区域范围多点找色
函数参数:
参数1:整数型,屏幕左上角X坐标
参数2:整数型,屏幕左上角Y坐标
参数3:整数型,屏幕右下角X坐标
参数4:整数型,屏幕右下角Y坐标
参数5:字符串型,第一点16进制颜色值
参数6:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
参数7:整数型,颜色相似度(推荐0.9)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)
注意事项:由于需要对一张图像中做大量的信息对比来匹配出屏幕范围中是否有需要的多点特征,所以这里提示必须调用开头加入KeepCapture命令,结束时ReleaseCapture释放掉。


调用范例:如果需要对一张图像做多次图色判断可以用这种调用方式拆开使用,节省资源。

  1. '加载当前屏幕画面信息
    KeepCapture
    '调用多点找色命令,判断该特征是否存在区域范围中
    If FindMultiCol(0,0,720,1280,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then
    '说明找到
    TracePrint "找到,第一个点坐标:" & IntX & "," & IntY
    Else
    '否则
    TracePrint "没有找到"
    End If
    '释放上次画面加载信息
    ReleaseCapture

复制代码

函数模块:

  1. '区域范围多点模糊找色
    Function FindMultiCol(x1,y1,x2,y2,col,str,n)
    FindMultiCol=False
    Dim x,y
    Do
    FindColor x1,y1,x2,y2,col,0,n,intX, intY
    If intX >= 0 Then
    If MultiColor(intX,intY,str,n)=True Then
    FindMultiCol=True
    Exit Do
    Else
    x=IntX
    y=IntY
    Do Until x > x2
    FindColor x,y,x2,y,col,0,n,intX,intY
    If intX >= 0 Then
    If MultiColor(intX,intY,str,n)=True Then
    FindMultiCol=True
    Exit Function
    Else
    x=IntX+1
    End If
    Else
    Exit Do
    End If
    Loop
    y1=y+1
    End If
    Else
    Exit Do
    End If
    Loop Until y1 > y2
    End Function

复制代码

原理解析:待编辑


函数名称:MultiColor
函数功能:处理多点点阵匹配,配合多点找色函数模块使用
函数参数:
参数1:整数型,起点X坐标
参数2:整数型,起点Y坐标
参数3:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
参数4:整数型,颜色相似度(推荐0.9)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)


函数模块:

  1. Function MultiColor(x,y,str,n)
    MultiColor=False
    Dim arr1,i,arr2()
    arr1=Split(str,",")
    For Each i In arr1
    arr2=Split(i,"|")
    If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False Then
    Exit Function
    End If
    Next
    MultiColor=True
    End Function

复制代码

原理解析:待编辑


以下部分是基于以上函数模块,进行优化组合,请大家理解后根据需求使用,也可自行组合以上几个模块使用。


函数名称:Cm
函数功能:固定坐标多点找色
函数参数:
参数1:整数型,屏幕X坐标
参数2:整数型,屏幕Y坐标
参数3:字符串型,第一点16进制颜色值
参数4:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)
函数模块:

  1. Function Cm(x,y,col,str)
    Cm=CmEx(x,y,col,str,0.9)
    End Function

复制代码

原理解析:待编辑


函数名称:CmEx
函数功能:固定坐标多点找色
函数参数:
参数1:整数型,屏幕X坐标
参数2:整数型,屏幕Y坐标
参数3:字符串型,第一点16进制颜色值
参数4:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
参数5:整数型,颜色相似度(推荐0.9)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)


函数模块:

  1. Function CmEx(x,y,col,str,n)
    KeepCapture
    CmEx=CmpMultiCol(x,y,col,str,n)
    ReleaseCapture
    End Function

复制代码

原理解析:待编辑


函数名称:Fm
函数功能:区域范围多点找色
函数参数:
参数1:整数型,屏幕左上角X坐标
参数2:整数型,屏幕左上角Y坐标
参数3:整数型,屏幕右下角X坐标
参数4:整数型,屏幕右下角Y坐标
参数5:字符串型,第一点16进制颜色值
参数6:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)


函数模块:

  1. Function Fm(x1,y1,x2,y2,col,str)
    Fm=FmEx(x1,y1,x2,y2,col,str,0.9)
    End Function

复制代码

原理解析:待编辑……


函数名称:FmEx
函数功能:区域范围多点找色(模糊百分比)
函数参数:
参数1:整数型,屏幕左上角X坐标
参数2:整数型,屏幕左上角Y坐标
参数3:整数型,屏幕右下角X坐标
参数4:整数型,屏幕右下角Y坐标
参数5:字符串型,第一点16进制颜色值
参数6:字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色)
参数7:整数型,颜色相似度(推荐0.9)
返回值:True 或 False(符合或不符合,坐标保存在intX与intY)


函数模块:

  1. Function FmEx(x1,y1,x2,y2,col,str,n)
    KeepCapture
    FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)
    ReleaseCapture
    End Function

复制代码

原理解析:待编辑……


待续……
20140519
修正:FindMultiCol函数模块中的一个逻辑错误,解决特别情况下会进入死循环的问题。

20140530
修改:三个函数名称与新版(1.5)新增命令重名问题。

原来名称 修改名称
CmpColor CmpCol
CmpMultiColor CmpMultiCol
FindMultiColor FindMultiCol

20140603
修正:CmpCol函数中坐标判断,避免多点找色偏移坐标为负数时,出现错误卡住

从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》更新20相关推荐

  1. 安卓setclicklistener函数没有_金主脚本按键精灵安卓按键初体验—乱斗西游2自动签到...

    按键精灵安卓按键初体验-乱斗西游2自动签到 金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓 ...

  2. android循环录制,按键精灵安卓版为什么我录制的脚本无法循环

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 按键精灵安卓版为什么我录制的脚本然后设置了无限循环为什么会停下来,求助 代码如下 Delay 1935- TickCount() TouchDownEve ...

  3. 按键精灵电脑版对接百度ai,告别字库(文字识别篇)

    很简单,根据百度ai接口api文档,用post或者get请求,封装参数请求响应即可.哈哈,当然不可能就这样结束了本篇博客了.本篇先讲文字识别,喜欢的朋友可以关注下,后续会继续写图片识别等所有ai对接方 ...

  4. android实现按键找图功能,按键精灵安卓版找图教程 找图功能使用技巧介绍

    按键精灵安卓版找图脚本使用技巧: --提高找图速度的3种方式 1.善于利用按键移动版新增的KeepCapture和ReleaseCapture函数 KeepCapture:截取当前图片并保存在缓存中, ...

  5. 按键精灵手机版(安卓 ios) 如何连接远程网络数据库 比如 sql server, 进行读写操作 云端自动化等

    一.前情提要 按键手机版直连的话 现在只支持本地数据库sqllite,想连接远程数据库也不是没办法,但麻烦一点 需要建立一个 "中转站" .姑且这么称呼,最形象. "中转 ...

  6. 全能android按钮,《按键精灵安卓版全能宝典》

    2. 电脑CHM版打开后,一片空白,没有内容,或者显示"已取消到该网页的导航"? 答:请右击文件→选择"属性"→点击"解除锁定"或" ...

  7. 按键精灵 android版运行异常,按键精灵安卓版 tap、touch命令 不好用的解决办法!...

    用按键精灵手机版写脚本来操作新浪微博APP,在关注列表页自动取消关注,代码如下: If x > -1 And y > -1 Then delay 1000 tap x,y delay 10 ...

  8. 视频教程-按键精灵手机版解放您的双手自动化教程-Android

    按键精灵手机版解放您的双手自动化教程 从事游戏开发已经13年以上,软件开发管理10年以上. 段安 ¥29.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程 ...

  9. 按键精灵移动端系列 - 按键精灵IOS版 之 网络已断开,请检查网络连接.解决方案.

    由于很多网友对这种问题,不知道如何处理.因本人也曾遇到过这种情况.经过不懈努力终于解决了这个神奇的BUG.长话短说上操作流程.如果觉得给力,请三连 点赞. 收藏. 转发. 谢谢您的支持. ** 1 安 ...

最新文章

  1. 【转】SAP开关账期后台任务
  2. MVC + AJAX请求失败的问题
  3. 构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型
  4. EchoServer
  5. SVN提交时出现locked错误解决办法
  6. 基于JAVA+Spring+MYSQL的家教管理系统
  7. 华三服务器升级文档,H3C交换机升级步骤
  8. Flash-制作空心文字
  9. 不同类型游戏音效竟有不同制作方法?—动作类型音效制作
  10. LED亮5秒灭5秒C语言程序代码,单片机【木仓示申吧】_百度贴吧
  11. K均值(kmeans)分类
  12. 微信小程序-动态验证码
  13. 苹果手机充电口接触不良怎么办_手机充电插口松动!声音变小!手机死机!怎么办?...
  14. 深度学习和神经网络的介绍(一)
  15. 华为如何开展人力资源管理变革
  16. 【转】刘润:不要和没有逻辑的人讨论业务
  17. 关于一个int *ptr=(int *)(a+1)问题的探讨
  18. Python+Selenium 含验证码的登录处理
  19. 苦七群问答整理210730—现在的微信搜索,真的很强很方便。
  20. 软件协助企业实现协作创新,构建商业价值网络

热门文章

  1. OpenCV图像处理--将图像裁剪为圆形
  2. NOIP2013 花匠 题解(方法全面)
  3. android adb broadcast,adb shell am broadcast -a  -d
  4. java程序设计蜘蛛纸牌_介绍程序员玩纸牌
  5. 89岁学会做PPT,巴菲特:最好的投资,是投资自己
  6. 杭电oj1000阶乘
  7. Python3.0基础教程
  8. request 和require区别_“request”和“require”在法律英语中用法的区别
  9. 3GP视频转换器代码
  10. 注册苹果开发者账号的方法