国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 基于OpenCV的微信跳一跳外掛實現(xiàn)

基于OpenCV的微信跳一跳外掛實現(xiàn)

時間: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)的思路。

首先來說一下外掛的通常思路,外掛會通過Android手機的ADB來截取屏幕,然后通過對截圖進行分析,算出來玩家與下一個落腳點的距離,然后通過距離算出來需要按壓多長時間的屏幕,之后再通過發(fā)送ADB指令來模擬按下屏幕達到自動刷分的目的。也就是說,這個外掛的核心就是取得玩家與下一個落腳點的距離,有了距離之后,一切都好說了。







這篇文章主要講的就是來確定這兩個點的編程思路。我們將會用到Python與OpenCV來進行操作。

OpenCV熟悉編程的人一定知道,是一個著名的開源計算機視覺庫,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。要想在Python上運行OpenCV只需要使用pip安裝就好,在Terminal中執(zhí)行pip install opencv-python即可。

注意,使用OpenCV時一般是用于分析圖片灰度圖,因為我這里需要畫框劃線進行標(biāo)記,所以為了方便就直接讀RGB彩圖了,這樣因為一個像素三個通道所以會慢一點,之后投入使用直接分析灰度圖就好。

1 玩家位置識別

首先需要做的就是識別玩家的位置,玩家的形狀不變,是一個紫色的棋子,那么可以使用OpenCV帶有的圖像模板匹配來找出玩家的位置。

首先需要一張小矮子的圖片,就像這樣,保存為player.png







然后就可以使用Python讀取了,對于游戲場景,我使用下圖,名字為1.png:







1.1 圖像模板匹配

模板匹配是一項在一幅圖像中尋找與另一幅模板圖像最匹配(相似)部分的技術(shù)。再OpenCV中調(diào)用matchTemplate函數(shù)即可實現(xiàn)模板匹配







1.2 代碼實現(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)被識別出來了:





在上圖中藍(lán)色的點即為玩家的位置。

2 落腳點識別

接下來就要識別落腳點了,但是蹲蹲千變?nèi)f化,有方形的,有圓形的。所以剛才的模板識別就用不上了,即使使用的話成功率也很低,這個時候就需要用到邊緣檢測了。

2.1 Canny邊緣檢測







OpenCV帶有Canny算法的實現(xiàn)來幫助我們得到圖形的邊緣。在做邊緣檢測之前首先需要對圖片進行高斯模糊處理,高斯模糊主要作用就是去除噪聲。因為噪聲也集中于高頻信號,很容易被識別為邊緣。高斯模糊可以降低偽邊緣的識別。但是由于圖像邊緣信息也是高頻信號,高斯模糊的半徑選擇很重要,過大的半徑很容易讓一些弱邊緣檢測不到。

執(zhí)行如下代碼:

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.







2.2 圖片切片

其實現(xiàn)在我們已經(jīng)可以開始分析邊緣來找到下一個落腳點了,但是圖片中邊緣實在是太多,可以通過裁切圖片來,首先要知道,下一個落腳點肯定是在整個界面的上1/2。也就是說,圖片的下半段可以不要,而且,上面的記分牌也沒有任何用處。







執(zhí)行以下代碼來切除上面的300像素的高度加下半部分圖片:

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)圖片被成功的裁掉了,留下了我們需要的部分。





2.3 消除玩家

但是有一點還是很煩,上圖的左下角還有一部分玩家的頭部,有時候如果玩家需要向左上角跳,這個頭的存在可能會造成一定的干擾,所以需要寫代碼消除它,因為我們已經(jīng)知道了玩家的坐標(biāo)了,所以把那個范圍的像素全設(shè)成0就好了。

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)被取出掉了







2.4 落腳點判斷

現(xiàn)在只剩下敦敦的邊緣了,現(xiàn)在需要得到他的中心點,仔細(xì)觀察這個圖形,發(fā)現(xiàn)他是一個菱形,并且有兩個點是很容易通過遍歷像素點然后分析得到的:





A點B點是很容易得到的,通過由上到下,由坐到右遍歷全部像素,A點應(yīng)該是便利順序的像素中第一個值為255的點,B點是便利順序中第一次橫坐標(biāo)最大的點。

得到了A,B點的坐標(biāo),整個形狀的中點 (X3, Y3)其實就是 (X1,Y2)。

可以通過如下代碼來判斷中心點:

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)出了中心點:







然后兩個點都找到了,可就可以通過兩點間距離公式算出距離,從而得出需要多少按壓時間了。

看下最終效果:

















可以看到敦敦是圓形的情況下中心點有點向左偏,是因為那個橢圓形的頂點是一排縱坐標(biāo)相同的點,所以之后可以優(yōu)化下取中間點就好

這就是OpenCV實現(xiàn)的大概思路,其實判斷落腳點也可以使用findContours函數(shù)來實現(xiàn),這里因為實在太容易直接判斷出來我就沒有用。

過兩天還有一場數(shù)學(xué)考試。。所以就先說到這吧。。。

代碼

https://github.com/Yigang0622/OpenCVWechatjump




首發(fā)于我的博客



關(guān)鍵詞:實現(xiàn)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉