1. 程式人生 > >python 打造一個微信跳一跳輔助!(手機本地運行)

python 打造一個微信跳一跳輔助!(手機本地運行)

.com simple pre 註釋 ima 獲取 IE 分享圖片 mask

先上成果效果圖:

技術分享圖片

用opencv 做識圖識別出棋子的坐標並把它框出來

終點位置的坐標是:

先觀察圖像發現棋子每跳過後的下一個目標點總是在棋子的上面

這樣就可以先獲取一個感興趣的區域,用numpy切出自己感興趣的區域

然後高斯模糊一下,找尋圖像中的輪廓效果特別棒!

如圖:

技術分享圖片

然後找出感興趣的區域也就是中間那一塊

技術分享圖片

接著尋找終點的位置:

用十字把它標出來:

技術分享圖片

接下來框出棋子的位置:

技術分享圖片

標出兩點的位置:

技術分享圖片

然後根據棋子和終點的坐標建立一個三角函數公式

連線兩點的位置

技術分享圖片

測試壓力系數為1.8

然後模擬點擊和截屏循環運行就可以了

技術分享圖片

更多效果圖片:

技術分享圖片

跳到正中間!

技術分享圖片

各種方塊都測試通過

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

最後上代碼:

 1 # -*- coding:utf-8 -*-
 2 import cv2,show
 3 import numpy as np 
 4 import math
 5 import time
 6 import dian
 7 v=0
 8 while v<1:
 9    v=v+1
10    img = cv2.imread(/sdcard/3.png)  
11    #img1 = cv2.imread(‘/sdcard/52.png‘)  
12    img1=img
13    hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
14 lower_blue = np.array([110,50,50]) 15 upper_blue = np.array([130,255,255]) 16 mask = cv2.inRange(hsv, lower_blue, upper_blue) 17 ret, binary = cv2.threshold(mask,0,255,cv2.THRESH_BINARY) 18 contours, hierarchy = cv2.findContours(binary,1,cv2.CHAIN_APPROX_SIMPLE) 19 cnt=contours[len(contours)-1]
20 a=0 21 dict={} 22 for i in contours: 23 dict[len(i)]=a 24 a=a+1 25 li=np.sort([l for l in dict.keys()],axis=0)[::-1] 26 x, y, w, h = cv2.boundingRect(contours[dict[li[0]]]) 27 cv2.rectangle(img1, (x, y), (x+w, y+h), (0,255,0), 5) 28 qi=[x,y,w,h] 29 img2=img1[350:1660] 30 img2 = cv2.GaussianBlur(img2,(3,3),0) 31 canny = cv2.Canny(img2, 50, 150) 32 b=0 33 lk=[] 34 for i in range(canny.shape[0]): 35 x=canny[i] 36 a=0 37 if b==1: 38 break 39 for c in x: 40 a=a+1 41 if c==255: 42 lk.append([i+350,a]) 43 b=1 44 cv2.line(img1,(lk[0][1]+20,lk[0][0]),(lk[0][1]-20,lk[0][0]),(255,0,0),5) 45 cv2.line(img1,(lk[0][1],lk[0][0]+20),(lk[0][1],lk[0][0]-20),(255,0,0),5) 46 zhon=[lk[0][1],lk[0][0]] 47 qil=[qi[0]+int(qi[2]/2),qi[1]+qi[3]] 48 print(起點) 49 print(qil) 50 print(終點) 51 print(zhon) 52 cv2.line(img1,(qil[0]+20,qil[1]),(qil[0]-20,qil[1]),(0,0,255),5) 53 cv2.line(img1,(qil[0],qil[1]+20),(qil[0],qil[1]-20),(0,0,255),5) 54 cv2.line(img1,(qil[0],qil[1]),(zhon[0],zhon[1]),(255,0,0),5) 55 yl=qil[1]-zhon[1] 56 xl=qil[0]-zhon[0] 57 #print(xl,yl) 58 lcd=int(yl*yl)+int(xl*xl) 59 cd=int(math.sqrt( lcd )) 60 print(長度按壓時間:) 61 an=int(cd*1.18) 62 print(an) 63 dian.dian(str(an)) 64 time.sleep(2) 65 show.show(img1)

依賴庫

import cv2,show
import numpy as np 
import math
其它為一些輔助,註釋掉即可!

python 打造一個微信跳一跳輔助!(手機本地運行)