写在前面:

主要运用python进行简单的图像处理,不得不说python用起来是真的爽,各种库的学习使得开发变得越来越简单...

其实玩过这个小程序的应该知道实现起来也不是很难,很适合新手练手。第一次到了500多题不知道是因为被检测了还是网掉了分数没提交。。。结果以后到200分就手动停了,发现提交是正常的......

话不多说先上效果:(gif太麻烦了将就着看吧......)

首先说一下思路:

1.运用投屏软件将手机屏幕投屏到电脑。(实际上也可以运用adb截图再处理,但是adb太慢到200题后速度会变得相对很快,所以运用投屏,我这里用的是:vysor,自行下载安装就好了)

2.图片处理。截图+识别(图像处理这里用的是PIL库,运用感知哈希算法、汉明距离进行图片匹配)

3.得到结果并点击。

**-***---**-**-*-**-*-*乱而华丽的分割线*--*--**-*--*--*****--*-

那就开始我们的代码吧:

1. 首先安装PIL库:https://www.cnblogs.com/mrgavin/p/8177841.html

ok很快!我们安装好了PIL。

我这这里主要用了其中的Image:

from PIL import Image

官方文档:http://effbot.org/imagingbook/image.htm

这里有个中文的自己写的:https://blog.csdn.net/icamera0/article/details/50706615(感谢大佬)

2.图片处理,我们需要得到图片的哈希值(dHash值),并运用汉明距离在我们自己做的列表中匹配最接近的。

截图:
from PIL import ImageGrab
img = ImageGrab.grab((left,top, right, bottom))#截屏幕
介绍一下我们这里用的感知哈希算法

一张图片有很多个像素点构成,每个像素点都是一个rgb,例如:

是一个440*300的图片,其中的像素点达到了13万...都计算的话显然有点吃力,所以我们缩小他的大小,把它缩小到15*20(当然你可以缩到其他的数字...主要是让他足够小并能比较准确的被识别)。然后的得到他的rgb,当然这里我们可以先对其进行二值化,然后在得到他的黑白图片,这样我们可以直接得到它的一个有 1,0组成的数组。那这个数组对于这个图片来说就是他的dHash。

这里又有一个问题就是每个图片都是不同的,不过这似乎很简单就可以解决,我们可以裁剪出其中每个数字并将其dHash然后对我们预先处理(首先得到一遍1-9以及'-','+',='的dHash存储数组)的dHash值进行比较就可以了。

再来介绍一下我们的汉明距离

实际上很简单,对象a变成对象b需要改变几个元素,例如:字符串"1235"变成"1257"需要改变的是2,2就是它们的汉明距离。我们可以运用其匹配两个dHash,一般两个相同数字图片的汉明距离在5以内。

开始我们的主要函数:
img = Image.open(path)  # 打开一张图片
img = img.convert('L')  # 灰度转化
re_img = img.point(table, mode)  # table可以为数组 在将灰度图像转换为位图图像(模式”1“)时,所有非零值都设置为255(白色)
newimg = img.crop(left, up, right, bottom)  # 裁剪
small_img = re_img.resize((width, height), mode)  # 缩小图片这里用 mode=Image.LANCZOS

我们可以运用上面的某些函数将普通的img,转换为黑白图片。当然这里point中的table可能有点问题,我们直接上代码:

table = []
for i in range(256):if i > threshold:table.append(0)else:table.append(1)
bin_img = img.point(table, '1')

然后我们要对其进行裁剪,分为两部分:横向,纵向。我们不难看出上面图片中每个数字之间是背景色的,转为黑白图片后就是白色的。

我们调用:

import numpy
num_img = numpy.array(re_img)#将其转换为二维数组形式,其黑为1,白为0。

当然这还不足以让方便我们识别我们该剪切那一部分,我们需要将其每一列每一行求和分别得到两个一维数组。

list(numpy.sum(numpy.array(img) == 0, axis=1)) #axis为0为列求和,1为行求和 返回一维数组。(我也不太确定到底是0,1对应的是谁)

得到了他们求和的数组之后我们判断一下那一块是大于零的并用crop裁减出来就可以了。

别忘记将其缩小!别忘记将其缩小!别忘记将其缩小!

横竖裁剪完成后我们的到了每一个数字的缩小版,下面我们就要对其进汉明距离的匹配了。这里也很简单我们只要判断一下两个的dHash有哪些不同就好了,这里的dHash很明显就是我们转换每个缩小版数字的数组。找出最小的汉明距离然后返回它对应的值(这个应该是你已经初始化完成的,我们先找几个样例然后得到其dHash,手动输入他对应的数字是多少并储存)。

#如果有问题可以去下面代码借鉴一下。

运算:

       上面我们终于就完成了,下面的是运算,这个其实对于学过算法的其实不难,但是python好就好在给你提供了你意想不到的库。比如说得到字符串中运算结果,例如

eval("2+5")==7

我们可以直接调用eval运算出结果并于结果对比。

3.点击:

点击还是比较容易实现的,python库如此强大!

import win32api, win32gui, win32con
win32gui.GetCursorPos()#得到鼠标位置
win32api.SetCursorPos(x, y)#改变鼠标位置到x,y
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0)#点击。0,0为偏移量具体百度

------------------------------------------不乱但是不华丽的分割线-------------------------------------------------

注意点:我们还需要初始化获取'44'这两个数字的dHash,因为44之间是连着的所以不会被我们程序分开然后就会得到错误结果。算是个坑点吧。

这一只有图像处理与匹配的函数,具体的其他的还是蛮简单的。

项目自取:https://github.com/goodtimep/python

Python 打造微信小程序-加减大师辅助程序相关推荐

  1. 微信小程序 加减控件

    微信小程序 加减控件 <!--index.wxml--> <view class='stepper'><text class='{{minusStatus}}' type ...

  2. python开发微信小程序-Python 开发者的微信小程序开发实践

    导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...

  3. 用python 玩微信小程序“跳一跳”

    12月28日,微信上线了小游戏「跳一跳」,瞬间成了全民游戏,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能. 作为技术出身的我们,是不是想用技术改变排名呢? 注意:本文适 ...

  4. python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册

    开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...

  5. 免费微信小程序,发一发打造微信小程序Saas营销服务移动工具箱

    微信是这个时代的伟大产物:小程序是微信的伟大产物:"发一发"承接伟大的产物,为广大用户提供免费的服务. 我们不知道下个时代会有什么形象级的产品诞生.但是,我们能抓住的就是眼前的所见 ...

  6. python玩微信小程序游戏_使用python实现微信小程序自动签到功能

    功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序 ...

  7. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录.模板推送 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...

  8. 微信智慧外链接微信小程序源码下载,支持多端转换,致力打造(微信)小程序生态的基础必需品

    全新运营版微信小程序智慧链接生成工具.致力打造(微信)小程序营销推广生态的基础必需品:全新UI界面及架构体系打造小程序智慧链接:只要拥有你就是手握百万流量的大佬!全新运营致富版微信小程序链接生成工具: ...

  9. Python Flask微信小程序登录流程及登录api实现代码

    1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...

最新文章

  1. JAVA爬虫--JS文件数据快速解析
  2. 要管理此计算机上的用户账户,win10用户账户控制 你要允许此应用 若要继续请输入管理员密码...
  3. go初学者安装echo框架
  4. sql server2008中怎样用sql语句创建数据库和数据表
  5. Steeltoe之Config客户端篇
  6. Feign 简介和使用
  7. IIS7 配置 PHP
  8. Ubuntu16.4配置caffe详细流程
  9. Git常用指令的使用
  10. ipq wifi校准
  11. Golang——time.Ticker定时器
  12. kettle命令运行工具(pan、kitchen、carte)
  13. 【编程原则】预则立,不预则废
  14. Pandas的panel结构
  15. 如何快速新建文件和文件夹
  16. 网络设备配置与管理-综合实验1
  17. 录屏转gif的好用小工具ScreenToGif,免费又好用!
  18. “辣条一哥”卫龙冲击港股IPO,我又吃出一家上市公司
  19. Win10 文件管理器右侧pdf 无法预览
  20. iOS开发-改变图片的颜色

热门文章

  1. gearman mysql_gearman+mysql实现持久化队列
  2. Servlet文件上传之FileItem类的常用方法
  3. 爬虫项目:爬取A股3000多家上市公司Python代码+解释
  4. 爬虫——喜马拉雅-话说明朝播放列表
  5. 计算机拒绝SFTP服务,SFTP上传文件权限被拒绝
  6. MySQL STRAIGHT_JOIN
  7. STM32外设系列—sg90(舵机)
  8. Collections.sort实现倒序汉字拼音排序,默认是按照正序进行汉字拼音排序MYSQL语句支持汉字排序SQL汉字排序
  9. CMD关闭端口号的命令
  10. 怎么撤销定时说说_苹果6怎样取消定时说说