時間:2023-05-12 09:30:02 | 來源:網(wǎng)站運營
時間:2023-05-12 09:30:02 來源:網(wǎng)站運營
基于OpenCV的微信跳一跳外掛實現(xiàn):前些日子,微信進行了一次更新,加入了一個小游戲跳一跳,發(fā)布之后這個游戲迅速走紅并且在朋友圈刷屏,游戲的規(guī)則很簡單,就是控制一個小矮子再各個墩子上跳來跳去。規(guī)則說起來容易但是想玩高分還是有一定難度的。這個游戲出現(xiàn)之后各路程序員也沒閑著,外掛橫飛,甚至產(chǎn)生了各種物理外掛。今天這篇文章就來講述一下我來使用OpenCV實現(xiàn)的思路。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)
通過調(diào)用上面的代碼即可進行模板匹配,最后一行的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)
之后再運行,這時會打開一張片,可以看見玩家的位置已經(jīng)被識別出來了: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)
運行后,發(fā)現(xiàn)圖片被成功的裁掉了,留下了我們需要的部分。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
然后再運行代碼,發(fā)現(xiàn)頭部已經(jīng)被取出掉了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)
重新執(zhí)行代碼,發(fā)現(xiàn)程序已經(jīng)標(biāo)出了中心點:關(guān)鍵詞:實現(xiàn)
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。