打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【老手都不知道的知识点】找图、多点找色、找字的原理

大家好,我是3分钟学堂的郭立员,今天给带来一期基础知识的文章,主要讲一下找图、多点找色、找字之间的联系与区别,这是一篇基础原理的教程,可能会有些枯燥。

    由于篇幅比较长,分两期更新。本期主要讲找图的原理以及偏色的原理。

图色原理

    无论是找图、找色、比色、找字这些命令都可以统称为图色命令,所有图色命令都有共同的特点,就是它们针对于图像像素点的颜色值和位置进行处理的。

图像像素点是什么

    我们把图像放大会发现,图像是由一个个颜色块组成的,由于这些颜色块非常小,在不放大的情况下,我们是看不出它们有明显分块界限的。那这些带有颜色的小方块,就是图像的像素点。

    像素点通常是近似正方形的,这里我用的是近似,它是由显示器屏幕的硬件决定的。

    像素点是在一个二维平面上排列的,分为横向和纵向,大量的像素点排列在一起就组成一张图像了。

找图命令的原理

    还是以上面那张图为例,我们截取一个4*4的图片,开始找图。

    这里我把4*4图片的每一个像素点都标注了序号,一共是16个序号。

    下面说一下找图的过程,我以从左上到右下顺序的找图为例。

    ①从马里奥图片左上角的第一个像素开始,寻找序号1像素点的颜色值,如下图那样一个个像素进行比对。

    ②假设找到了和序号1一样颜色的像素点,记录一下这个点的位置。

    ③开始对上一步中找到点的下一个像素点和序号2的颜色比对是否一样,如果一样的话,再用下一个像素点颜色比对序号3的颜色,依次类推一直比对到序号16的颜色。比对颜色也是按照4*4的位置比对,就是序号1-4是第一行,序号5-8是第二行……

    ④上一步比对序号2-16颜色有两种可能性:

    一是完全一样,如果完全一样说明我们找图成功了,找图命令返回步骤②记录的位置,也就是我们常用的intx,inty。

    二是比对到某个序号颜色值不一样,说明比对失败,继续从步骤②位置的下一个像素点开始,找寻序号1像素点的颜色,循环上面的操作,以此循环往复。

    ⑤循环比对所要找图区域内的所有颜色,如果比对完所有颜色都没有比对成功,说明找图命令没有找到图,为了方便脚本判断,会把-1赋值给intx,inty。

    以上这些步骤就是找图的原理。

    那么想一下哪些因素会影响找图速度?

    ①获取像素点颜色值的快慢,这也是为什么用“截图到内存命令”会提高找图速度的原因。

    ②计算数据的速度,也就是比对两个像素点颜色值是否一样的用时。

    ③所要找的图片越靠前找到用时越少。

    ④序号1像素点在整个找图区域内出现的次数,次数越多可能比对的时间就多,这里用“可能”是因为如果第一次或者前几次出现就找到图了,下面的就不需要继续比对了。

    ⑤所找图的图片尺寸越小速度越快,比如文中的例子是4*4的图,只要比对16个颜色就可以,如果是50*50就要比对2500个点。当然对于现在计算机来说,16和2500的计算用时的差距是微乎其微的,但是如果进行循环找图,比如循环1万次,16万和2500万,用时就会有明显的区别了。

    针对截图在说一下,是不是图片越小越少,不是的,如果只有1个像素点,那么会有大量的重复可能性,从而导致找图找到错误的位置,我们截图本着一个原则:在保证截图具有唯一标识性的前提下,图片越小越好。

偏色和相似度

    使用找图命令的时候,还有两个参数,它们在上面找图原理没有说到,就是偏色和相似度。

    它们是做什么用的呢?

    偏色和相似度的作用是一样的,都是为了增加找图的容差率(容错率),就是把与要找图非常接近的颜色也看做是有效的颜色,从而实现当找图区域的颜色发生细微变化后,还能通过找图命令找到我们想要的位置坐标。

下面开始介绍一下偏色:

(一)偏色

    在找图代码中,这个参数默认是000000,也就是无偏色。这六个数字代表什么呢?

    它们分成3组,每一组分别代表一种颜色。

    这里需要强调一下颜色顺序是蓝色、绿色、红色,如果你有关于颜色的基础,是不是想说颜色值的顺序不是红绿蓝吗,没错在多数颜色相关的软件或者程序中确实是红绿蓝RGB,但是按键不是,也不知道编写按键的作者是怎么想的,记住这个顺序就好。

    我们还是以上面马里奥找图为例:

    序号1的像素点

    颜色值是:d6330a,按照上面颜色值分组:

    蓝色数值:d6

    绿色数值:33

    红色数值:0a

    这里面数值为啥有字母呢,因为颜色值是十六进制的,而不是我们日常的十进制。

    十进制:0123456789 每满10个数字进一位

    十六进制:0123456789ABCDEF 每满16个数字进一位,这里面A就相当于10,B就相当于11,C就相当于12,D就相当于13,E就相当于14,F就相当于15。

    关于十六进制和十进制转换自行百度,这里不讲。

    我们以蓝绿红每个颜色的最小偏色值为例,来了解一下偏色。

    每个颜色偏色的最小值是01,那么偏色值就是010101,假设我们给找图命令加上这个010101的偏色会有什么影响呢?

    原本我们找序号1的颜色值是d6330a,如果加上偏色010101,那么符合要求的颜色值,就由原来的1个变成27个。

    符合要求颜色值的计算公式是d6330a±010101

    按颜色拆分计算:

    蓝色:d6±01得到范围是d5~d7

    绿色:33±01得到范围是32~34

    红色:0a±01得到范围是09~0b

    这些颜色范围得到的27个颜色是什么?

    d53209  d5320a  d5320b

    d53309  d5330a  d5330b

    d53409  d5340a  d5340b

    d63209  d6320a  d6320b

    d63309  d6330a  d6330b

    d63409  d6340a  d6340b

    d73209  d7320a  d7320b

    d73309  d7330a  d7330b

    d73409  d7340a  d7340b

    红色是未偏色的颜色,其他都是偏色后,其实偏色可以理解为颜色偏移。

    原本一个颜色值d6330a,只是偏色值增加了01,就变成了27个颜色,那么找图命令中,比对序号1的颜色值时,就不是比对1个颜色,而是27个颜色,这样符合要求的颜色就有27种可能性,这么一来,找图的容差率(允许差别)就高了。

    当我们增大偏色值,这个找图的颜色范围会继续扩大。

    扩大的颜色范围计算公式: 

    (2*蓝色偏色+1)*(2*绿色偏色+1)*(2*红色偏色+1)

    我们刚刚每个颜色最小偏色01的计算结果就是:

    (2*01+1)*(2*01+1)*(2*01+1)=3*3*3=27

    这里有一些特殊情况,颜色值是有上下限的,最小值是00,最大值是ff,如果最小值00再减去任何值都还是00,如果最大值ff再加上任何值都还是ff。

    回答新手一个常问的问题,偏色值要填多少合适呢?

    偏色值的大小并不是一个固定的数值,但它有一个判断趋势,要根据你的需求来定,比如说:

    你希望找的颜色非常精准,那偏色值就要填小一点,甚至是六个0这种无偏色的情况。

    如果你希望找的颜色相近的就算符合要求的,那么偏色就稍微填大一点。

    当然这里注意不要太大,否则就会把相差很大的颜色也误认为是符合要求的颜色。

    在网上很多教程的作者告诉你,偏色直接填333333或者是222222,这个数字可以不,答案是可以。偏色333333后,符合颜色的增加峰值到总颜色的6.51%,偏色222222后,符合要求的增加峰值到总颜色的2.13%。

    偏色你填333333可以,但是不要把它当成固定的偏色值,也不要认为偏色的6个数必须都是一样的,你填333234也可以,填302010也行,记得一定要看需求。

    再有一个问题,偏色值高点好还是低点好?

    偏色低:容差率低,速度快。

    偏色高:容差率高,速度慢。

    两种各有优缺点。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Photoshop-PS调色-黑白命令原理
黑白命令(起作用的滑块、百分比含义)|PS调色系列13
Adobe关于色彩校正及灰平衡控制意义的权威论述
色阶的自动里的这两个选项有何具体不同?
第三章图像调整
PS中色阶、直方图详细讲解,助你对它们更深认识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服