OpenCV应用——魔灵召唤辅助实现(一)
cac55 2024-10-21 03:44 22 浏览 0 评论
魔灵召唤是韩国的一个卡牌收集类游戏(阴阳师的玩法也是从此而来的),笔者我断断续续玩这游戏也得有三年,这个游戏已经存活了五年,可见这个游戏是非常的坚挺呀。
但是游戏有点肝,非佛系玩家的我总是忍不住要去玩它,恍惚间头发已经稀疏,不禁抚额长叹:哎!要是有个不被封的脚本就好了!我需要做一个物理外挂!!!让官方检测不出来的那种,哼。
在参谋了网上的一些资料后,我大致整理了下思路:
- 获取手机截图,这一操作官方肯定检测不到吧。or视觉拍照,官方肯定也检测不到呀。
- OpenCV处理得到的手机截图(拍出的照片),因为游戏的一些画面是固定的,我们只需找出屏幕上需要模拟点击的位置即可,采用模板匹配方法。
- 模板匹配完成获得需要点击的屏幕位置,控制板子执行相应的动作。
- 可以使用树莓派、arduino之类的,但是我老本行虽然是电机控制,这些板子还没用过……用一些plc之类的成本又会提升,后续学习一下树莓派吧。
好,那我们先搞定第一步:手机截图获取。
如何用电脑获取手机截图?可以使用adb工具。
adb工具即Android Debug Bridge(安卓调试桥) tools。
它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。
一、adb下载
以下是adb工具包最新Google官方版下载地址:
ADB和Fastboot for Windows
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
ADB和Fastboot for Mac
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
ADB和Fastboot for Linux
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
由于这些是直接的 Google 链接,用户可以确保下载不仅是官方的,而且将始终能够获得最新版本的 ADB 和 Fastboot 。
二、adb初步使用
下载好的文件直接解压即可,将文件路径添加到环境变量的用户变量的path里。
比如我的路径是:
C:\Users\Administrator\platform-tools_r28.0.2-windows\platform-tools
只需要:
好,现在win+R 调出 运行窗口,输入cmd打开控制台,输入 adb,如果没有报错则表示安装成功,并且你会看到adb的使用指南。
输入 adb version:
将手机通过USB连接到电脑,输入 adb devices:
那么问题来了,到了这一步很容易会卡住,只显示“List of devices attached”,请检查以下几条(不好意思暂时只学习了android的):
(1)手机打开的USB调试,在开发者模式下把USB相关选项勾上,依据手机品牌自行查询~
(2)如果手机端设置没有问题,电脑上依然未检测到手机设备,那么看一下手机驱动是否安装。
(3)adb版本太低,但是如果是从上面链接下载的,不会存在这个问题。
现在我们安装成功了,使用一下截图指令来获取手机截图吧!
首先看一下说明:
那我们使用的指令就是 adb shell screencap -p ,不过截图方式也有两种
第一种是先命令手机截图并存到手机sd内,然后读到电脑上。
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
真是麻烦呀,还要占手机内存,那必须要保存几次之后清空,否则开着游戏一直截图,手机不得爆了==
第二种方法是直接保存到电脑上
adb shell screencap -p > E:/summonerswar.png
哈哈第二种方法这么简单,赶快打开看看,???what the hell?
网上查找一下原因:
在windows操作系统下,回车符是\r\n,在Linux操作系统下,回车符是\n。安卓系统是基于Linux内核开发而来的,所以在安卓系统中回车符也是\n,这样就会出现一个问题,在安卓系统中截图得到的二进制数据流中,如果出现\n,Windows会将\n解析成\r\n,所以截图命令得到的png文件不能正常打开。要使得在Windows系统中能对截图得到的png文件进行操作,需要将png文件中数据部分的\r\n转换成\n,这样就能够得到正确的文件。
因此,我们还需使用python对文件进行一番操作。
三、使用python对adb获取的文件进行处理
adb指令在python中怎么使用?调用os模块就可以了。
import os def convert_img(path): with open(path, 'br') as f: img_old = f.read() img_new = img_old.replace(b'\r\n', b'\n') with open(path, 'bw') as f: f.write(img_new) if __name__ == '__main__': os.system('adb shell screencap -p > E:/PycharmProjects/android_summonerswar/pictures/summonerswar_0.png') convert_img(r'E:\PycharmProjects\android_summonerswar\pictures\summonerswar_0.png')
运行一下,发现在不运行魔灵召唤时获得的截图是正常的,运行魔灵召唤时就不正常(长宽反了),找了半天没找到原因,我们就取个巧,通过改变大小还原截图吧。
加入resize之后的程序:
import os import cv2 import time def getimg_toPC(imgname): ''' 直接从获取手机截屏到电脑上 :param imgname: 截屏文件名,xxx.png :return: None ''' os.system('adb shell screencap -p > E:/PycharmProjects/android_summonerswar/pictures/'+imgname) with open('E:/PycharmProjects/android_summonerswar/pictures/'+imgname, 'br') as f: img_old = f.read() img_new = img_old.replace(b'\r\n', b'\n') with open('E:/PycharmProjects/android_summonerswar/pictures/'+imgname, 'bw') as f: f.write(img_new) img = cv2.imread('E:/PycharmProjects/android_summonerswar/pictures/'+imgname) img_new = cv2.resize(img, (1000, 461), cv2.INTER_AREA) cv2.imwrite('E:/PycharmProjects/android_summonerswar/pictures_resize/'+imgname, img_new) def getimg_sdcard(imgname): os.system('adb shell /system/bin/screencap -p /sdcard/'+imgname) os.system('adb pull /sdcard/'+imgname + ' E:/PycharmProjects/android_summonerswar/pictures/'+imgname) if __name__ == '__main__': img_name = 'screen.png' while True: time.sleep(2) getimg_toPC(img_name) img = cv2.imread('E:/PycharmProjects/android_summonerswar/pictures_resize/'+img_name) cv2.imshow('here', img) cv2.waitKey(0)
终于得到了想要的图像,注意读上来的分辨率要比电脑大,因此等比例缩小了下(1000,461):
好,第一步完成啦,下一步准备OpenCV中模板匹配的应用喽~
相关推荐
- 终于,你可以在 iPhone 上玩《饥荒》了
-
继七月登陆iPad平台后,冒险生存游戏《饥荒》(Don'tStarve)经过两个月时间终于更新并适配了iPhone,此前我已就游戏在iPad上的表现写过详尽评测和上手攻略,故本文不再对游...
- 2025年最适合Macbook新手掌握的5个免费工具,效率立马飙升!
-
刚入手Macbook是否觉得操作不熟?担心新手期过长难以熟练提高效率?别担心!本文精选五款国区AppStore免费可下载的官方认证工具,所有选择均基于新手核心痛点与迁移成本考量,解决「系统维护」「操作...
- 苹果iOS 13.4和iPadOS 13.4正式更新,支持鼠标、键盘操作
-
智东西(公众号:zhidxcom)编|王颖智东西3月25日消息,苹果今天向用户推送了iOS13.4和iPadOS13.4系统更新通知。iPadOS13.4增加了对iPad鼠标和触控板的支持,...
- 苹果即将发布macOS 15 用户界面将迎来重大革新
-
苹果公司计划于6月举行的全球开发者大会(WWDC)上,震撼发布全新的macOS15操作系统。据CNMO最新报道,此次更新将彻底革新“菜单和应用程序用户界面”的排列方式,为用户带来全新的使用体验。ma...
- **Bartender 5:菜单栏管理神器**(菜单栏工具)
-
提供免费下载网站Mavom.cn**Bartender**让你可以隐藏、重新排列或移动菜单栏应用,保持桌面整洁。**主要功能:*****整理菜单栏应用**:随心所欲地隐藏或显示应用。***更新提醒...
- Mac用户必备!12款最实用的高效App,绝对值得收藏
-
作为一名数码博主,日常的工作不仅包括写文章,还涉及到大量的内容创作、视频编辑和资料管理。随着使用Mac的时间越来越长,我发现一台强大的Mac电脑,若没有合适的App加持,效果往往大打折扣。因此,我深入...
- 苹果电脑死机了按什么键(mac卡死按哪三个键)
-
苹果电脑以其卓越的性能和稳定的系统而闻名,但在使用过程中,偶尔也会遇到死机或应用程序无响应的情况。这时,掌握一些有效的强制重启或关闭方法就显得尤为重要。本文将详细介绍苹果电脑在死机时可以采取的几种处理...
- 怎么查看macbook硬盘是不是原装的
-
要查看MacBook的硬盘是否是原装的,可以采取以下几种方法:###通过系统信息检查1.**查看设备信息**:打开苹果菜单栏中的“关于本机”选项,然后选择“存储”或“磁盘工具”。这将显示你电脑上已...
- 苹果MacBook一定要进行的6个设置|新手必备省电技巧
-
一、MacBook省电设置技巧1、电池偏好设置打开“系统偏好设置”,选择“电池”,选择第二项“电池”,不同的系统版本和机型在这个界面会有所差别。勾选“使用电池电源时使显示屏略暗一些”,勾选“优化电池充...
- 在 Mac 菜单栏也能控制 HomeKit 家居设备
-
想要控制家里的HomeKit设备,我们可以利用Apple官方的家庭App。但在Mac上,家庭App不能算得上好用,不像iOS可以从控制中心直接操作,在Mac上必须打开家庭A...
- 苹果手机里这个图标是什么意思?原来这是个监听器!一直都不知道
-
不知道大家最近都有没有关注iPhone的新消息呢?iPhone11出来之后,不少小伙伴都被圈粉啦!小编不得不说绿色的那款是真好看啊!当然不仅是好看,用过苹果手机的小伙伴都知道,苹果手机里有很多超好用的...
- 如何解决苹果电脑弹出本地项目钥匙串提示?
-
Mac电脑使用的时候,因为通过iCloud同步钥匙串,或者是修改本地账户密码,会反复弹出某项目想要登录使用“钥匙串”的提示,且无法关闭的现象。那我们该如何解决呢?快和小编一起来看看吧!具体方法如下1....
- MAC小技巧:如何快速调整Dock栏的大小
-
苹果mac系统dock栏怎么缩小?想要自己调节一下dock栏的大小,该怎么调节呢?下面我们就来看看详细的苹果Mac电脑如何快速调整Dock栏的大小样式教程,需要的朋友可以参考下。1、在Dock栏右侧,...
- 新买了苹果电脑不会用?给小白的使用手册,MacOS入门必备
-
咱们很多小伙伴都是十几年甚至二十几年的Windows老用户了,如果换成苹果电脑,可能会一脸懵逼,一时间不知道怎么使用。毕竟苹果电脑搭载的是MacOS操作系统,除了系统界面和操作上有区别外,电脑键盘上有...
- 苹果macOS 15设置界面将迎来重大更新 更智能更美观
-
【CNMO科技消息】苹果计划在6月WWDC全球开发者大会上震撼发布macOS15。据CNMO了解,此次更新将彻底革新“菜单和应用程序用户界面”的排列方式。macOSVentura系统中的“系统设置...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)