先上成果效果图:
超级瞄准已部署!
精确定位目标中心!
用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+110 img = cv2.imread('/sdcard/3.png') 11 #img1 = cv2.imread('/sdcard/52.png') 12 img1=img13 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=021 dict={}22 for i in contours:23 dict[len(i)]=a24 a=a+125 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=033 lk=[]34 for i in range(canny.shape[0]):35 x=canny[i]36 a=037 if b==1:38 break39 for c in x:40 a=a+141 if c==255:42 lk.append([i+350,a])43 b=144 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,showimport numpy as np import math 其它为一些辅助,注释掉即可!