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

软件版本:2014.03
软件大小:71.2M
更新时间:10-25

按键精灵安卓版
立即下载

软件版本:3.1.7
软件大小:52.1M
更新时间:12-12

按键精灵iOS版
立即下载

软件版本:1.2.4
软件大小:29.2M
更新时间:10-28

按键精灵Mac版
立即下载

软件版本:1.1.0
软件大小:12.3M
更新时间:12-29

快捷导航

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

登录 注册
发新话题 回复该主题

【作者成长之路】按键初学者-多点找色应用,如何准确识别数字 [复制链接]

1#
本帖最后由 专员小兔 于 2015-7-29 14:00 编辑


多点找色应用,如何准确识别数字[转载自:showtopic.aspx?topicid=327017&forumpage=1&page=1]

原理概述:

主要通过0-9个多点特征,对一个范围内进行找色识别,找出所有的数字,并按照从左往右的方式拼接,最终可得出我们想要的数字内容。当然该方法也适合用于其他字符识别,这里主要讲解下数字识别为例子。

优点:只需确认写入大致范围,无需对每个数字做专门的特征记录,计算每个字符宽高等令人纠结的判断,只需要简单的使用按键抓抓获取每个数字的多点字符串信息即可。该方法即可把范围内数字等字符信息获取下来并按照从左往右拼接好返回。(多点字符串信息获取时注意起点必须最靠左)

一、首先你得收集09十个数字图片,必须有每个数字的清晰图片整如下图:


二、把每个数字以多点特征形式使用按键抓抓获取并保存为数组。



三、原理详细讲解。

步骤一:在以上红圈范围内从左往右执行多点找色判断,0-9十个数字全部扫描,得出它们横坐标X,每识别到一个对比X坐标,保留最小的那位,最终十次判断结束,我们可以得到数字3,在最前面,保存在一个变量中str_number = 3

步骤二:从已获取的数字3为起点,继续往后搜索,我们可以得到数字1,以此类推全部识别完毕即可获得完整的一串字符串。

这里提醒大家,目前获取的变量类型属于字符串,如需要数字计算对比大小等操作可用Int函数转换下即可。

例子:number=Int(str_number)

最后把以上数字识别判断源代码列出以供大家参考。

图片原图大小:


大家可以以这张图片中的数字大小进行测试。

  1. Dim Arr_number(9)
  2. Arr_number(0) = array("000000", "2|0|000000,-1|1|000000,3|1|000000,-1|3|000000,3|3|000000,-1|5|000000,3|5|000000,-1|6|000000,3|6|000000,0|7|000000,2|7|000000")
  3. Arr_number(1) = array("000000", "1|-1|000000,1|1|000000,1|3|000000,1|5|000000,0|6|000000,2|6|000000")
  4. Arr_number(2) = array("000000", "1|-1|000000,3|-1|000000,4|0|000000,4|1|000000,3|2|000000,2|3|000000,1|4|000000,0|6|000000,2|6|000000,4|6|000000")
  5. Arr_number(3) = array("000000", "1|-1|000000,3|-1|000000,4|0|000000,2|2|000000,3|2|000000,4|3|000000,4|5|000000,0|5|000000,1|6|000000,3|6|000000")
  6. Arr_number(4) = array("000000", "3|-4|000000,2|-3|000000,1|-2|000000,3|-2|000000,3|-1|000000,3|0|000000,1|1|000000,3|1|000000,4|1|000000,3|3|000000")
  7. Arr_number(5) = array("000000", "2|0|000000,4|0|000000,0|2|000000,1|3|000000,3|3|000000,4|4|000000,0|6|000000,4|6|000000,1|7|000000,3|7|000000")
  8. Arr_number(6) = array("000000", "1|-1|000000,3|-1|000000,3|0|000000,0|2|000000,1|2|000000,2|2|000000,3|2|000000,0|3|000000,4|3|000000,0|5|000000,4|5|000000,1|6|000000,3|6|000000")
  9. Arr_number(7) = array("000000", "2|0|000000,4|0|000000,0|1|000000,3|1|000000,2|3|000000,2|5|000000,2|7|000000")
  10. Arr_number(8) = array("000000", "1|-1|000000,3|-1|000000,4|0|000000,0|1|000000,4|1|000000,1|2|000000,2|2|000000,3|2|000000,0|3|000000,4|3|000000,0|5|000000,4|5|000000,1|6|000000,3|6|000000")
  11. Arr_number(9) = array("000000", "1|-1|000000,2|-1|000000,3|-1|000000,4|0|000000,0|1|000000,0|2|000000,4|2|000000,1|3|000000,2|3|000000,3|3|000000,4|3|000000,4|4|000000,1|5|000000,4|5|000000,1|6|000000,2|6|000000,3|6|000000")
  12. '开始判断
  13. TracePrint GetNumber(0, 0, Plugin.Sys.GetScRX, Plugin.Sys.GetScRY, Arr_number, 0)
  14. EndScript
  15. 'a,b,c,d 传入范围四个坐标参数
  16. 'arr 传入数字多点字符串特征的数组参数
  17. 'n 是表示每个字符的间距超过多少像素则中间以竖线隔开。例子123|456,0表示无需判断。
  18. Function GetNumber(a, b, c, d, arr, n)
  19. GetNumber = - 1
  20. Dim i, temp_number_a, temp_number_c, xy, temp_number, temp_Fm, temp_txt, s, temp_arr, temp_n, temp_x
  21. temp_number_a = a : temp_txt = - 1 : s = - 1
  22. Do
  23. temp_number = - 1 : temp_number_c = c
  24. For i = 0 To UBound(arr)
  25. temp_Fm = Plugin.Color.FindMutiColorEx(temp_number_a, b, c, d, arr(i)(0), arr(i)(1), 0.9, 0)
  26. If temp_Fm <> "-1|-1" Then
  27. xy = Split(temp_Fm, "|")
  28. If temp_number = - 1 or Clng(xy(0)) < temp_number_c Then
  29. temp_number = i : temp_number_c = Clng(xy(0))
  30. End If
  31. End If
  32. Next
  33. If temp_number = - 1 Then
  34. If n > 0 and s > - 1 Then
  35. GetNumber = Mid(GetNumber, 1, s) & "|" & Mid(GetNumber, s + 1, Len(GetNumber) - s)
  36. End If
  37. Exit Function
  38. End If
  39. temp_arr = Split(arr(temp_number)(1), ",")
  40. temp_x = 0
  41. For i = 0 To UBound(temp_arr)
  42. temp_n = Int(Split(temp_arr(i), "|")(0))
  43. If temp_n > temp_x Then
  44. temp_x = temp_n
  45. End If
  46. Next
  47. temp_number_a = temp_number_c + temp_x
  48. If n > 0 Then
  49. If temp_txt = - 1 Then
  50. temp_txt = temp_number_a
  51. Else
  52. If temp_number_a - temp_txt > n Then s = Len(GetNumber)
  53. temp_txt = temp_number_a
  54. End If
  55. End If
  56. If GetNumber = - 1 Then
  57. GetNumber = temp_number
  58. Else
  59. GetNumber = GetNumber * 10 + temp_number
  60. End If
  61. Loop
  62. End Function
复制代码

附件:您需要登录才可以下载或查看附件。没有帐号? 注册
最后编辑专员小兔 最后编辑于 2016-01-07 17:20:55
本主题由 小精灵客服组 专员小兔 于 2015/9/9 14:28:12 执行 提升/下沉主题 操作
Don't frown。
2#


3#

2222222222222222

4#

回复 1楼专员小兔的帖子

源码怎么不全呢

5#

好东西,标记一下,学习学习

6#

没看明白~

7#

看不明!

8#

可以,学习一下

9#


10#

偶也表示没有看明白

11#

新手看不懂

12#

认真学

发新话题 回复该主题