用python检测微信跳一跳里面棋子棋盘的位置
1、用matplotlib模块读取图像对应的像素数据:import matplotlib.image as mga = mg.imread('0.png')

2、用电脑的画图软件,查看棋子某个点的位置,以此查看棋子的RGB颜色:print(a[472,299])对应的数值是:[0.22745098 0.19215687 0.3372549 ]


3、查看这个点附近的像素值与这个点的差别:for i in range(-5,5,1): c = a[472,299+i]-b c = sum(c**2) print(c)

4、找棋子的位置,起始就是找棋子底诙孑懿篡座的中心点;棋子最宽的地方的中心点,就是底座中心点;b = np.array([0.22745098,0.19215687,0.3372549])帆歌达缒A = []for i in range(int(h/3),int(h*2/3),1): B = [] for j in range(0,w-1,1): c = sum((a[i,j]-b)**2) if c<0.01: B.append(j) A.append(len(B)) print(A)我们可以看到,棋子最宽的地方是34个像素。

5、用下面的代码,就可以确定出棋子的中心点:for i in range(int(h/3),int(h*2/泌驾台佐3),1): B = [] for j in range(0,w-1,1): c = sum((a[i,j]-b)**2) if c<0.05: B.append(j) if len(B)==34: breakprint(j,B[0]+17)嗯——同一部手机里面的棋子的大小是固定的。

6、类似的,寻找新棋盘,也就是寻找新棋盘的中心点。先找到新棋盘的上顶点:for ii in range(int(h/3),int(h*2/泌驾台佐3),1): y=np.reshape(a[ii,:]-a[ii,0],(1,-1))[0] if sum(y)!=0: breakfor k in range(w): if (a[ii,k]-a[ii,0])[0]!=0: break在原图中观察,发现这个点的位置差不多。


7、这样,可以得到新棋盘的颜色:print(a[ii,k])[0.9607843 0.5019608 0.22745098]

8、注意,棋盘的中心点和棋盘的上顶点在同一条竖直线上,这样,我们就可以找到棋盘的中心:d = a[ii,k]C = []for u in range(int(h/3),int(h*2/3),1): if sum(a[u,k]-d)==0: C.append(u)此时,int(np.mean(C))就是新棋盘的中心点的像素纵坐标。
