• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

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

发新话题 回复该主题

[笨蛋熊] 【大道至简】颜色里的秘密 - 找图原理篇 [复制链接]

1#
关于找图,你了解多少呢?
今天就带大家解析一下这东西。

找图的代码其实并不复杂,基本上是个语言都能实现,很容易就能找到基本款的源代码,改一改,就可以拿来用了。

当然,这种代码的价值其实不大,毕竟是看优化和细节的东西。



我们经常能接触到的找图有按键精灵PC版找图,移动版找图和插件的找图,还有插件的找字。

大漠插件的找字基于“OCR”功能实现,但是我们知道,大漠插件的OCR,和我们平时用的OCR工具其实是两种东西,它的OCR就是对比二值化后的点阵,原理和找图一样。

不像其他的OCR,是基于人工智能的方式来实现的,因此也在我们今天的讨论范畴之内。



1. 找图里少有人知的小细节:



找图命令支持透明色:

当图片的四个角颜色RGB值完全相同时,这个颜色就会作为透明色了,点阵对比的时候,遇到透明色的话就不对比,【默认颜色对比成功】,默认颜色对比成功这几个字很重要,比如一张图做成全透明的,那么恭喜你,你得到了一张任何时候都能找到的图片。



找图命令的点阵对比原理:

比如一张 100 x 100 的图片,它一共有 10000 个像素点,那么找图最基本的功能就是对比屏幕上的每一个点,直到遇到这些像素点的颜色全都匹配的位置,并返回这个位置的坐标。

当然,这是相似度为1的情况(也就是100%一样),如果你把相似度设置为 0.9,那么这 10000 个像素点,只需要匹配9000个像素点,就算找到图片了。

相似度这个参数,是用于处理画面可能被遮挡的情况的,有时候游戏画面的一部分会被遮挡,不能找整张图片,所以用相似度参数,允许只匹配一部分就算找到图像了。

理解相似度出现的含义,别找啥图都手欠加个相似度,相似度这东西,是非常浪费性能的。

举个例子,如果相似度为1,那么对比一个点,最坏的情况是9999个点都匹配了,最后一个没匹配,大部分情况下,前几个像素点有不匹配的,直接就跳过这个位置了;但是,如果你手欠设置了 0.9 的相似度,前面100个点不匹配?没关系的,反正还没到相似度的阈值呢,接着对比呀~

要知道,每一个像素点的对比,都是有性能开销的,你的脚本为啥慢?一个参数设置不好,性能直接拉跨上百倍都有可能。

另外透明色的问题也要注意,透明色直接判定为对比成功,而不是忽略这个点,比如一张图片10000个点,其中透明色5000个点,相似度设置为0.8,那么只需要3000个点匹配成功了,这张图就算找到了,实际上的相似度相当于0.6了,这可不妙,很容易找到一些你不希望找到的结果。



找图命令的偏色处理原理


偏色可比相似度好理解多了,然后按键不支持 HSV,就更好理解了,三原色三种分量三个数据分别处理的容差咯,前几章内容已经讲的很透彻了。

其实就是对比像素点的时候,用颜色A的三个分量分别减去颜色B的三个分量,然后取绝对值,再判断是否小于等于偏色,小于或者相等的话,这个点位就算匹配了。

其实,偏色也是比较影响性能的,但没有相似度那么大。

你可以这么理解,颜色其实是一个32位数值,正常情况下,判断两个数值是否相等是非常快的操作,但如果要把RGB给拆出来,再分别判断,那就需要额外很多计算了,效率也就低了很多,不过好在有mips指令和饱和计算的MMX指令集,倒也不会浪费什么性能,但肯定比直接对比要慢就是了。

需求比较硬,这东西加上更好一些,毕竟有些地方颜色值他就是会差那么一点。



找图命令的效率优化原理

对于移动版按键来说,它的屏幕很小,但是分辨率奇高,一张看起来不大的图,可能放到电脑上一看,好家伙,半个屏幕没了。

要是真的在手机的孱弱的处理器上找这么个玩意,它可能会累死。

所以实际上,移动版按键找图是跳像素对比的,比如一张图1000 x 1000,一共要找 100万个点,但实际上,它是每隔多少个像素找一个点,真正对比的点就几万,这样性能就大大的提升了。



2. 分享一个带找图功能源代码的大漠插件替代品:

https://gitee.com/louisfree/op

这玩意参考了天使插件的源代码,然后补充了一些功能,代码是比较完整的,而且复杂度不高,可以尝试读一下。



好了,就这些东西了,学了这些东西,是不是想要自己实现一个找图功能呢?我想挖个新的坑了,就叫bitmap处理吧。

发新话题 回复该主题