时间:2023-05-12 09:30:02 | 来源:网站运营
时间:2023-05-12 09:30:02 来源:网站运营
基于OpenCV的微信跳一跳外挂实现:前些日子,微信进行了一次更新,加入了一个小游戏跳一跳,发布之后这个游戏迅速走红并且在朋友圈刷屏,游戏的规则很简单,就是控制一个小矮子再各个墩子上跳来跳去。规则说起来容易但是想玩高分还是有一定难度的。这个游戏出现之后各路程序员也没闲着,外挂横飞,甚至产生了各种物理外挂。今天这篇文章就来讲述一下我来使用OpenCV实现的思路。import cv2 as cvimg = cv.imread("1.png")player_template = cv.imread('player.png')player = cv.matchTemplate(img, player_template, cv.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(player)
通过调用上面的代码即可进行模板匹配,最后一行的max_loc则是匹配出来的位置,因为玩家是一个宽度50高度150像素的图形(在我的iPhone 6s上)。所以再添加以下代码来框出玩家位置。并且画出了玩家的点。corner_loc = (max_loc[0] + 50, max_loc[1] + 150)player_spot = (max_loc[0] + 25, max_loc[1] + 150)cv.circle(img, player_spot, 10, (0, 255, 255), -1)cv.rectangle(img, max_loc, corner_loc, (0, 0, 255), 5)cv.namedWindow('img', cv.WINDOW_KEEPRATIO)cv.imshow("img", img)cv.waitKey(0)
之后再运行,这时会打开一张片,可以看见玩家的位置已经被识别出来了:img_blur = cv.GaussianBlur(img, (5, 5), 0) #高斯模糊canny_img = cv.Canny(img_blur, 1, 10) #边缘检测cv.namedWindow('img', cv.WINDOW_KEEPRATIO)cv.imshow("img", canny_img)
然后图片就会被边缘识别,这个图是灰度图,每一个像素是 0-255之间任意一个值,黑色为0白色为255.height, width = canny_img.shapecrop_img = canny_img[300:int(height/2), 0:width]cv.namedWindow('img', cv.WINDOW_KEEPRATIO)cv.imshow("img", crop_img)
运行后,发现图片被成功的裁掉了,留下了我们需要的部分。for y in range(max_loc[1], max_loc[1]+150): for x in range(max_loc[0], max_loc[0]+50): canny_img[y][x] = 0
然后再运行代码,发现头部已经被取出掉了crop_h, crop_w = crop_img.shapecenter_x, center_y = 0, 0max_x = 0for y in range(crop_h): for x in range(crop_w): if crop_img[y, x] == 255: if center_x == 0: center_x = x if x > max_x: center_y = y max_x = xcv.circle(crop_img, (center_x, center_y), 10, 255, -1)cv.namedWindow('img', cv.WINDOW_KEEPRATIO)cv.imshow("img", crop_img)cv.waitKey(0)
重新执行代码,发现程序已经标出了中心点:关键词:实现