自动玩Windows PC端微信跳一跳。使用opencv-python检测跳棋位置和跳板中心位置。
- window_left_top和window_right_bottom的值,保证截图区域准确。
- temp_player.jpg和temp_end.jpg最好自己重新截图以匹配分辨率。
- jump函数中的参数2.735以及moveTo鼠标移动位置。
- 当距离过近时容易跳远,程序末尾进行了距离缩放。该参数可能需要调整。
识别跳棋时直接使用cv2.matchTemplate与temp_player.jpg进行模板匹配即可。
直接识别白点的准确率不高,因此修改了原库的实现,全部使用边缘检测确定目标跳板中心点。
- 先进行Canny边缘检测。
- 然后擦除边缘图中跳棋及其邻域的像素。
- 裁剪截图避免边界和左上角分数数字的影响。
- 逐行扫描,当出现非0像素点时即找到目标跳板的顶部中心点坐标(x_top, y_top)。
- 根据跳板在跳棋左侧还是右侧识别跳板的边缘,得到顶部中心点和边缘点在x轴(横轴)方向的差值x_delta,用来预估跳板的大小。
- y_bottom = y_top + x_delta,相当于让顶点y坐标根据跳板大小进行预先偏移,目的是跳过小白点且避免跳板本身纹路的影响。然后从y_bottom开始逐渐增加y坐标,查看(y, x_top)附近是否有像素,有则视为找到了底部顶点。则要跳到的目标点即为(y_top + y_bottom) / 2.