按键精灵按图找图方法
- 格式:docx
- 大小:38.52 KB
- 文档页数:2
经常在论坛里看到有人发按键精灵找图求助的帖子,所以特意写了此篇文章(可能算不上文章)。
虽然我以前有抓图的经验,但为了写篇像样的文章,特意做了不少实验。
首先要强调的是设置找图参数问题(不是刚学抓图的人,这点可以不用看)。
下面是找图的语句VBSCall Call FindPic(left,top,right,bottom,filename,similar,x,y)left处填写找图区域的左边界,top处填写找图区域的上边界,right处填写找图区域的右边界,bottom处填写找图区域的下边界。
设置的找图区域不要出屏幕范围,否则可能会出错(我也不太确定^_^)。
如果屏幕分辨率是1024×768,那屏幕范围是0,0,1023,767;如果如果屏幕分辨率是800×600,那屏幕范围是0,0,799,599。
因为屏幕坐标是从0开始算的,不是从1开始算的,所以右边界和下边界的值要减1。
曾经看到有人找图范围设置成0,0,800,600,就超出了屏幕范围。
filename处填图片文件名的路径,也可以只填文件名,这时墨认图片文件的路径是在script文件夹下,图片文件要是BMP格式的,JPG格式估计不行(没试过^_^),失真大。
similar处填图片的相似度,取值在0.5到1之间(我曾经试过取2,测试结果忘了-_-! 别砸我),取的值越大,相似度越高,找图的速度也越快(这是别人说的)。
虽然按键精灵的作者推荐取0.9,但只要图不是透明的,背景设置正确(这是这篇文章的重点),设成1都能找到(再同一台电脑上肯定没问题,换台电脑就不知道了)。
x处填保存找到的图片的横坐标的变量,y处填保存找到的图片的纵坐标的变量。
这程序返回的是找到的图片的左上角的坐标。
当程序找不到符合的图片时,这2个变量都被置-1。
这里要注意,如果脚本中用鼠标的位置来指示找到的图片,如果没有考虑到找不到符号图片的问题,当找不到符合的图片时,虽然鼠标不能移到坐标(-1,-1)处,但鼠标会移到屏幕左上角,也就是坐标(0,0)处。
学习网络游戏找怪的思路方法(按键精灵脚本技术)很多朋友都不知道如何在游戏中用按键精灵找怪物请看下面哦对一些找怪的思路小有体会。
简单来说找怪就是找怪与背景不同的独有的特征,可以通过找怪的颜色/图片、怪名字颜色/图片、怪血条颜色/图片、渐开线扫描、小地图找怪等等的方法来实现。
具体看游戏而定,下面就介绍几种找怪的方法:1。
区域找色应该说是最简单的找怪方法了,在区域里查找怪的特有颜色、名字颜色、血条颜色、怪的阴影等等。
如果找到移动鼠标到怪身上进行攻击(推荐用区域模糊找色或从区域中间向外找色)。
例子(区域模糊找色):VBSCall FindColorEx(0,0,1024,768,\"FFFFFF\",1,0.8,x,y)//区域模糊找色,0,0,1024,768为区域范围,\"FFFFFF\"为颜色,1为查找方式(中间向外),0.8为模糊值,x,y为找色后储存坐标的变量If x>=0 and y>=0//如果找到颜色(通过判断坐标变量是否在区域内就可以知道有没有找到目标)MoveTo x y//把鼠标移动到该色的坐标(如果找的是怪名字或血条,可能移动不到怪身上,这时就要用鼠标偏移如:MoveTo x+10 y+10)Delay 50//延时LeftClick 1//左键单击进行攻击EndIf//条件结束用数组区域查找多色:点击查看注:①。
区域范围的定位:区域范围指的是被搜索区域的范围,这4个参数分别指的是区域的左,上,右,下。
简单的说就是取区域的左上角x,y坐标和右下角的x,y坐标,把这4个数值依次组合起来就是一个区域范围了。
②。
很多朋友对最后两个坐标变量x,y不太了解,在这里通俗的解释一下:顾名思义,这两个变量是用来贮存找色或找图后的坐标。
当找到目标后,把目标所在的坐标位置贮存到这两个变量里,然后可以通过判断这两个坐标变量是否在区域范围内来确定是否找到了目标。
函数说明:1.TransformWindow(窗口句柄)功能:转换窗口,对要取后台图色数据的窗口使用该函数后才能取后台图色数据。
如果是DX图形绘图的窗口,DX绘图区域必须有部分移到屏幕外,否则无法使用。
转换窗口后,有些窗口(特别是大多数游戏的)要等待一会儿才能用其它函数可靠地取到后台图色数据,等待的时间要大于画面两次刷新的时间间隔。
转换后到取消转换前,可以无限次使用取到后台图色数据的命令,即通常只需要转换一次。
参数:1)窗口句柄:整型数。
2.UnTransformWindow(窗口句柄)功能:取消窗口转换,DX图形绘图的窗口,用过TransformWindow后,必须用UnTransformWindow取消窗口转换才能让DX绘图完全移到屏幕中,否则后很严重(不会损坏电脑的),自己试下就知道了。
参数:1)窗口句柄:整型数。
3.GetPixelColor(窗口句柄,横坐标,纵坐标)[颜色值]功能:获得指定点的颜色参数:1)窗口句柄:整型数。
2)横坐标:整型数,窗口客户区坐标。
3)纵坐标:整型数,窗口客户区坐标。
返回值:颜色值:整型数。
例子:Plugin hwnd=Window.Foreground()Plugin Window.Move(hwnd,-30,10)Plugin BGCP2_02.TransformWindow(hwnd)Delay 200Plugin color=BGCP2_02.GetPixelColor(hwnd,0,0)MsgBox CStr(Hex(color)),4096,"颜色"Plugin BGCP2_02.UnTransformWindow(hwnd)Plugin Window.Move(hwnd,10,10)4.CmpColor(窗口句柄,横坐标,纵坐标,颜色,颜色最大偏差)[是否满足条件]功能:判断指定点的颜色,后台的IfColor参数:1)窗口句柄:整型数。
制作游戏辅助必学图片找图、图片二期处理来源:按键学院【按键精灵】图片找图?啥是图片找图呢?之前小编在论坛上看到有童鞋纠结这么一个问题:获取游戏里一个物品的截图,然后想和在电脑存放的一张没有打开的图片做匹配,如果截取的物品截图可以在电脑存放的图片里找到,就继续操作下一步。
哇塞~ 一听这个想法,我和我的小伙伴都惊呆了。
好高端的样子,图片里找图,而且还是没打开的图片!小编惊呆之后又继续逛论坛,锵锵锵~就是那么巧,小编找到了图片找图的方法~图片找图使用【一只鱼】●图灵v1.1插件,只需要几行代码就能轻松解决图片找图的问题。
使用前准备1、下载一只鱼插件,解压到任意路径2、将解压后文件夹里的 FISH.dll 和 FISH.html 两个文件剪切到按键精灵安装目录下的plugin文件夹里。
3、打开按键精灵(如果复制文件到plugin文件夹里时按键精灵是开启状态,请关闭之后再开启)需要用到的插件命令命令名称:FindPicture 区域找图命令功能:区域找单张图片或者多张图片命令参数:参数1:变体型,BMP图片路径参数2:字符串型,查找方向参数3:浮点型,颜色相似度参数4:变体型,查找区域范围参数5:整数型,返回查找结果类型返回值:整数型,路径BMP图片的坐标代码Call Plugin.FISH.Bind("G:\1.BMP")//绑定路径图片Dim xy, x, y, ixy = Plugin.FISH.FindPicture("G:\2.BMP", 0, 1.0, "FULL", 0)//或者xy = Plugin.FISH.FindPicture("G:\2.BMP", "从左上到右下", 1.0, "FULL", 0)For i = 0 To UBound(xy)x = xy(i, 0)y = xy(i, 1)TracePrint x & "," & yNext代码分析:1、 Call Plugin.FISH.Bind("G:\1.BMP") 绑定主图片(小编截取了电脑整个屏幕作为主图,保存在G盘命名为1.bmp)2、xy = Plugin.FISH.FindPicture("G:\2.BMP", 0, 1.0, "FULL", 0) 需要找的图(小编接取的是电脑屏幕上我的电脑图标),找到之后将坐标返回给变量xy注意:图片的格式要为BMP一只鱼插件除了支持图片找图之外,它还支持图片二期处理和无字库找字,我们一起来看看~~图片二期处理例如,我们要在图片上画圈圈,画框框等等,就属于图片的二期处理,我们看一个例子,看看一只鱼插件是如何实现图片的二期处理的。
1、首先明确编写脚本的目的,本例子中主要是完成以下的目标:找到图片,并用鼠标左击一次新建一个脚本,点击上方的【抓抓】
2、在图像下,使【抓抓】在截取窗口的前面,然后点击【截屏】
3、框选出要截取的图片,选择【位图另存为】
4、命名图片,然后保存
5、关闭【抓抓】,点击【附件】
6、点击【添加】,将刚才保存的图片插入脚本中
7、回到脚本,点击【颜色/图形命令】
8、在第一个下拉菜单中选择【区域找图】
9、然后选择找图的区域,如果需要在整个屏幕找图,需要将上面的数值设为电脑的分辨率,如果只需要在一个区域内找图,可以用【抓抓】确定区域坐标
10、然后将红框内的文件名改为图片的名称,可以调整图片的相似度,如果图片在所找的区域内没有相似的图片,就可以调得低一些,反之就调得高一些
11、注意要勾选【使用附件图片路径】,然后点击插入
12、现在就只需要添加鼠标点击的命令了,在【则】后面添加语句,也是图中箭头指示的位置
按键精灵使用图文教程按键精灵脚本
13、点击鼠标命令下的移动命令,不需要管当前的坐标值
14、在【源文件】窗口下,将具体的数值替换成【intX+20,intY+20】因为脚本找到图后,会将图片所在的左上角的坐标位置赋值给X,Y两个变量,
如果直接输入【intX,intY】鼠标点击的时候就会点击图片的左上角,就有可能点不到图片,所以要X,Y设置一个偏移量,这个偏移量是根据图片大小来设置的,
如果图片面积小,偏移量大,也是点击不到图片的,所以设置完成后,需要测试一下
15、然后设置一个延时时间,自己掌握长短
16、接着在输入一个鼠标单击的命令即可
17、按键精灵如何找图这个脚本就编写好了按键精灵如何找图。
按键精灵找图点击设置方法本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March1、首先明确编写脚本的目的,本例子中主要是完成以下的目标:找到图片,并用鼠标左击一次新建一个脚本,点击上方的【抓抓】2、在图像下,使【抓抓】在截取窗口的前面,然后点击【截屏】3、框选出要截取的图片,选择【位图另存为】4、命名图片,然后保存5、关闭【抓抓】,点击【附件】6、点击【添加】,将刚才保存的图片插入脚本中7、回到脚本,点击【颜色/图形命令】8、在第一个下拉菜单中选择【区域找图】9、然后选择找图的区域,如果需要在整个屏幕找图,需要将上面的数值设为电脑的分辨率,如果只需要在一个区域内找图,可以用【抓抓】确定区域坐标10、然后将红框内的文件名改为图片的名称,可以调整图片的相似度,如果图片在所找的区域内没有相似的图片,就可以调得低一些,反之就调得高一些11、注意要勾选【使用附件图片路径】,然后点击插入12、现在就只需要添加鼠标点击的命令了,在【则】后面添加语句,也是图中箭头指示的位置按键精灵使用图文教程按键精灵脚本13、点击鼠标命令下的移动命令,不需要管当前的坐标值14、在【源文件】窗口下,将具体的数值替换成【intX+20,intY+20】因为脚本找到图后,会将图片所在的左上角的坐标位置赋值给X,Y两个变量,如果直接输入【intX,intY】鼠标点击的时候就会点击图片的左上角,就有可能点不到图片,所以要X,Y设置一个偏移量,这个偏移量是根据图片大小来设置的,如果图片面积小,偏移量大,也是点击不到图片的,所以设置完成后,需要测试一下15、然后设置一个延时时间,自己掌握长短16、接着在输入一个鼠标单击的命令即可17、按键精灵如何找图这个脚本就编写好了按键精灵如何找图。
1 为什么写找血条?生命值在网游中是最关键、最敏感、最值得关注的参数之一,而血条作为人物生命值的直观展现,几乎所有的实用脚本都要与血条打交道,几乎所有的实用脚本都首先关注人物的生死存亡,几乎所有的打怪练级加PK类网游脚本都首先提供自动加红加蓝等基础功能,在简单游平台上,您提供的脚本要是不提供加红加蓝功能,上网、出门还真不好意思和别的简单游作者打招呼!生命值/血值,因其颜色一般为红色所以又叫“红”,相应地把补充生命值叫做“加血”、“加红”或者“补红”等等。
同样的,HP值/法力值/魔法值,因其颜色一般为蓝色所以又叫“蓝”,同时把补充魔法值叫做“加蓝”或者“补蓝”等等。
找血条和找蓝条的原理类似,区别只在于颜色不同,因此在这里我们只介绍找血条的方法。
找血条技术是一门很基础的技术,其应用范围之广令人发指:∙找血条是循环找怪打怪的基础。
在小地图上,利用鼠标点击和遍历地图上的所有地点,查找是否存在血条,以此判断此处是否存在怪物,实现自动找怪打怪。
∙找血条是补红补蓝的基础。
实现自动补红补蓝的基础就是能够自动地、准确地判断人物是否已经缺红缺蓝。
……目前得到血条的数值一般有三种方式:找内存法、解析封包法、找色找图法。
找内存方法是一种最直接、最根本、最有效的方法,只要能得到生命值的内存地址,得到生命值就如探囊取物一般,如果你的胆子再稍微大一点,甚至可以修改生命值。
所以,找内存法可以说是最锋利的倚天剑,“倚天一出,谁与争锋”!当然武器越锋利也越容易伤到自己,使用内存方法需要冒较大的风险,一旦被封的话一定让你痛不欲生,欲哭无泪,哭爹喊娘,欲仙欲死!而且网游厂商对内存读取之类的技术深恶痛绝,会采用各种技术例如动态内存等来防止第三方轻易读取内存,读取与反读取内存的较量也是一个永恒的话题。
截获和解析游戏封包的方法的优缺点和读取内存法类似,优点是解决方案比较直接和彻底,但是封包的加解密,协议分析都比较困难,且动态变化。
找色找图法是一种较为中庸的方法,不强大不张扬,不温不火,却又比较保险。
1 为什么写找色找图?话说某天,笔者在按键精灵论坛上闲逛,突发奇想,敲入关键字“找色〞结果搜索到了400多个帖子,敲入关键字“找图〞结果搜索到了500多个帖子,大部分帖子的标题如下:◆问一个区域找图问题◆为什么我找图的时候鼠标老跑到左上角?◆求后台找图的脚本!◆按键精灵的后台找图找色对网络游戏不能用?◆很奇怪的一个找图问题◆……看了这些帖子,可以真切地感受到网友嗷嗷待哺的心情扑面而来,这也是实战篇第一个专题选择“找色找图〞的一个重要原因,当然还有另外两个原因:其一,找色找图是几乎所有实用脚本必须使用到根底技术。
假设说按键精灵语言和VBS 语言是按键精灵的内功和内力的话,那么按键精灵中的鼠标键盘命令和找色找图功能绝对可以称的上是外家功夫中的拳法和腿法,而拳法和腿法在各个门派中都是最最根底的功夫。
且看找色找图广泛的应用场景:◆自动识别箭头实现自动跳舞;◆自动识别血条加红加蓝;◆自动挂机找怪打怪;◆自动识别码验证;◆自动识别NPC做任务;◆QQ休闲游戏例如连连看对对碰辅助;◆……其二:找色找图功能相对较难掌握。
从网络及按键精灵论坛上的帖子来看,虽然已经有了一部分找色找图教程和热心网友的详细解释,但是远不够深化和系统,有些人甚至对颜色、像素、坐标系等根底知识和概念都搞不清楚,依葫芦画瓢写出脚本来,脚本运行不正确或者没有到达预先现象时很茫然,不知道从何处入手解决问题。
2根底知识与概念找色找图涉及到的根底知识和概念包括:像素、颜色、坐标系等,这些知识相对枯燥,已经理解的看官可以跳过此节的内容,当然假设看官您想复习一下根底知识,再顺便帮笔者挑挑错误,愈加欢迎。
我们知道,计算机处理任何事物都必须首先把现实世界的信息转换成它所能理解的信息,这个过程就是所谓的数字化。
在现实世界中,我们看到的事物都是连续的图像,但在计算机中,我们假设把一副图片放大数倍,会发现这些看似连续的图片其实是由许多小方点所组成,每个小方点涂抹了一种颜色,这些小方点就是构成图片的最小单位:像素。
Python实现按键精灵(⼆)-找图找⾊⼀、实现功能 判断在指定坐标范围内,是否存在相似度⼤于n的图⽚,并返回坐标。
⼆、基本思路 A=你需要寻找的图⽚ B=截取当前页⾯中指定范围的图⽚ 利⽤opencv 判断A在B中的位置, 在该位置截取与A图同⼤⼩的图⽚C 对⽐图⽚C与图⽚A的相似度三、实现的代码段 1、安装所需要的库pip install opencv-pythonpip install pywin32 2、截取指定坐标的图⽚ 参数说明 filename:保存的⽂件名 hwnd:窗⼝句柄请想办法获取 pos:坐标位置 [x1,y1,x2,y2]。
x1,y1 是左上⾓坐标、x2,y2 指右下⾓坐标。
该功能可以返回不在最顶层程序的截图。
def window_capture(filename,hwnd=0,pos=None):hwnd = hwnd # 窗⼝的编号,0号表⽰当前活跃窗⼝# 根据窗⼝句柄获取窗⼝的设备上下⽂DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗⼝的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图⽚saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)if pos==None:x1=0y1=0w = MoniterDev[0][2][2]h = MoniterDev[0][2][3]else:x1=pos[0]y1=pos[1]w=pos[2]-pos[0]h=pos[3]-pos[1]# print w,h #图⽚⼤⼩# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, MoniterDev[0][2][2], MoniterDev[0][2][3])# ⾼度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上⾓(0,0)长宽为(w,h)的图⽚saveDC.BitBlt((x1, y1), (w, h), mfcDC, (x1, y1), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, filename) #清楚图⽚数据,防⽌内存泄露 win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() 3、利⽤opencv 判断A在B中的位置 参数说明 target:cv2.imread(“图⽚B”) template:cv2.imread(“图⽚A”)def find_picture(target,template):#获得模板图⽚的⾼宽尺⼨theight, twidth = template.shape[:2]#执⾏模板匹配,采⽤的匹配⽅式cv2.TM_SQDIFF_NORMEDresult = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)#归⼀化处理cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1 )#寻找矩阵(⼀维数组当做向量,⽤Mat定义)中的最⼤值和最⼩值的匹配结果及其位置min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)#匹配值转换为字符串#对于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED⽅法min_val越趋近与0匹配度越好,匹配位置取min_loc #对于其他⽅法max_val越趋近于1匹配度越好,匹配位置取max_locstrmin_val = str(min_val)#绘制矩形边框,将匹配区域标注出来#min_loc:矩形定点#(min_loc[0]+twidth,min_loc[1]+theight):矩形的宽⾼#(0,0,225):矩形的边框颜⾊;2:矩形边框宽度cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)#显⽰结果,并将匹配值显⽰在标题栏上# cv2.imshow("MatchResult----MatchingValue="+strmin_val,target)# cv2.waitKey()# cv2.destroyAllWindows()x=min_loc[0]y=min_loc[1]return X,Y 4、返回指定图⽚的指定位置指定坐标#target原始图⽚#x,y 起始坐标#w,h 返回的宽长def get_pic_from_pic(x,y,w,h,target):region = target[y:y+h,x:x+w]retrun region 5、⽐较两个图⽚的相似度def compare_picture( imageA, imageB):#灰度图⽚⽐较grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)(score, diff) = compare_ssim(grayA, grayB, full=True)return float(score)。
按键精灵按图找图方法
1.用截屏工具截屏需要部分图像,并保存为PNG格式,建议用按键精灵的抓取工具截取图像,图像更清晰。
2.新建空白脚本
3.将需要寻找的的图像添加到脚本附件,这步很关键!!!
点添加,选取需要寻找图像的截屏PNG文件
4.在颜色/图形命令中,选择区域找图,然后输入需要找图找范围;范围可以通过抓取工具确定座标,如果全屏寻
找座标就是屏幕分辨率。
然后在路径后面文件名框中,输入附件文件中的名字,直接修改引号内文件名即可。
要保留.png后缀。
确定好后点插入。
5.打到图片后要做什么操作,在后面插入其它命令即可。
比如鼠标移动到打到图形某个位置:
MoveTo intX+10, intY+20 的意思是鼠标移动到已到到图形的,从左上角横向10个像素、纵向20个像素位置继续添加其它操作命令即可。