标签:odi 高斯 bubuko SQ span 长度 起点 其它 lin
先上成果效果图:
用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
其它为一些辅助,注释掉即可!
标签:odi 高斯 bubuko SQ span 长度 起点 其它 lin
原文地址:https://www.cnblogs.com/ksxh/p/9047492.html