先上成果效果圖:
超級瞄准已部署!
精確定位目標中心!
用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
其它為一些輔助,注釋掉即可!