• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.05
软件大小:21.6M
更新时间:07-04

按键精灵安卓版
立即下载

软件版本:3.3.5
软件大小:62.5M
更新时间:9-25

按键精灵iOS版
立即下载

软件版本:1.3.5
软件大小:29.2M
更新时间:06-14

最新企业版UiBot
立即下载

软件版本:3.3
软件大小:282M
更新时间:08-06

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
返回列表 12345678» / 12
发新话题 回复该主题

[13教程进阶篇]5.动态图要怎么玩 [复制链接]

1#

动态图要怎么玩



找图找色作为脚本中用来识别界面元素的主要方式,相信你们一定不陌生,我们可以轻易的使用命令来获取屏幕任何一个位置的BGR颜色信息,并在脚本中自由的选择处理的方式,但有一些情况是我们很难使用BGR颜色去处理的,比如----动态图。



我们来看这样一个动态图:





此时我们的需求能够在蓝量剩下大概一半的时候能够识别到并按下相应的回蓝药品。于是我们直接取蓝条正中间的一个点来判定颜色,经过尝试:



每隔50毫秒取蓝条中间一个点的颜色,发现颜色偏差很大,这是由于蓝条里有不断在变化的效果,这种情况如果使用BGR颜色来判定,错误率很高,于是我们需要对这些颜色进行处理,看能否得出他们相似的地方。

这里我们肉眼可以看出,无论这个图片如何变化,蓝色区域总是蓝色,红色区域总是红色,因此,我们可以使用HSV颜色模型来解决这个问题。

什么是HSV?其中H为色调,S为饱和度,V为明度。HSV对用户来说是一种直观的颜色模型,我们刚刚观察出来的颜色是蓝色,也就是色调为蓝色,那么无论他各种变化,只要色调没有变化,我们识别出来的就不会变化。

那么我们来尝试一下,首先是,我们要将BGR转换成HSV,这个我们可以借助百度,很容易就找到算法,我们只要将语法转换成按键的语法就行了,这里我已经写好,直接用吧!

  1. Do
  2.     TracePrint "BGR: "&GetPixelColor(568,338)
  3.     TracePrint "HSV: "&BGR2HSV(GetPixelColor(568,338))
  4.     TracePrint ""
  5.     Delay 50
  6. Loop

  7. Function BGR2HSV(bgrvalue)
  8.     // 补位
  9.     If len(bgrvalue) < 6 Then
  10.         bgrvalue = "000000"
  11.     End If
  12.     // 获取三原色分量
  13.     Dim b = left(right(bgrvalue, 6), 2)
  14.     Dim g = left(right(bgrvalue, 4), 2)
  15.     Dim r = right(bgrvalue, 2)
  16.     r = CLng("0x"&r)
  17.     g =    CLng("0x"&g)
  18.     b = CLng("0x"&b)
  19.     
  20.     // 取最大值和最小值
  21.     Dim max = r
  22.     Dim min = r
  23.     If max < g Then
  24.         max = g
  25.     End If
  26.     If max < b Then
  27.         max = b
  28.     End If
  29.     If min > g Then
  30.         min = g
  31.     End If
  32.     If min > b Then
  33.         min = b
  34.     End If
  35.     // 计算 hue
  36.     Dim h
  37.     If r = max Then
  38.         h = (g - b) / (max - min)
  39.     End If
  40.     If g = max Then
  41.         h = 2 + (B - R) / (max - min)
  42.     End If
  43.     If b = max Then
  44.         h = 4 + (R - G) / (max - min)
  45.     End If
  46.     h = h * 60
  47.     If h < 0 Then
  48.         h = h + 360
  49.     End If
  50.     h = Round(h)
  51.     // 计算 saturation
  52.     Dim s = (max - min) / max
  53.     s = s * 100
  54.     s = Round(s)
  55.     // 计算 value
  56.     Dim v = (max / 255) * 100
  57.     v = Round(v)
  58.     // 组合返回
  59.     BGR2HSV = h & "." & s & "." & v
  60. End Function
复制代码

我们直接运行一下:




相对于BGR这么大的偏差,我们发现HSV中的H,也就是色调,变化及其微小,只需要加上一定的容差,我们就能很准确的识别。


当然,HSV的功能不仅仅如此!相信聪明的你学了之后一定能找出更多的用途!想学习更多吗,请继续关注本系列教程。




本主题由 副管理员 兄弟工程师13 于 2016/7/14 17:16:23 执行 移动主题 操作
2#

看看吧看看

3#

研究研究

4#


5#

dgsegewgherh

6#

学习学习

7#

好东西,必须看

8#

00000000000000000000000000

9#


10#

uuuuuuuuuuuuuuuuuuu

11#

kankhhhh

12#


13#

66666666666

14#

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

15#

顶一下!

16#

很过分的v好

17#

我来学习一下啊。

t.cn/RtSZGC6
18#

必须学习

19#

研究研究

20#

我们直接运行一下

发新话题 回复该主题