中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python微信跳一跳開發中棋子定位像素遍歷的示例分析

發布時間:2021-07-24 14:31:57 來源:億速云 閱讀:112 作者:小新 欄目:開發技術

這篇文章主要介紹python微信跳一跳開發中棋子定位像素遍歷的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

方法說明

像素遍歷的實質依然是顏色識別。
在github中給出的方法中,采用像素遍歷的方法是:

  • 從高度的1/3處開始至高度的2/3處進行遍歷;

  • 首先間隔50像素進行搜索

  • 當像素的顏色和每一行開始的像素顏色不同時,認為找到了最上面的棋盤位置,則返回上一個間隔處開始遍歷(i-50);

  • 對每一行的像素都進行遍歷,當滿足給定的顏色范圍時,記錄最下面一行的y值,x值的和與個數,平均即可得到中心x值。

  • 所得到的x值和y值即為棋子最底部的中心位置;

  • 按照自己手機的分辨率調整棋子的高度(減去一個固定值)

上訴方法的代碼如下(可以自行到github下載):

def find_piece_and_board(im):
 #尋找關鍵坐標
 w, h = im.size

 piece_x_sum = 0
 piece_x_c = 0
 piece_y_max = 0
 board_x = 0
 board_y = 0
 scan_x_border = int(w / 8) # 掃描棋子時的左右邊界
 scan_start_y = 0 # 掃描的起始 y 坐標
 im_pixel = im.load()
 # 以 50px 步長,嘗試探測 scan_start_y
 for i in range(int(h / 3), int(h*2 / 3), 50):
 last_pixel = im_pixel[0, i]
 for j in range(1, w):
  pixel = im_pixel[j, i]
  # 不是純色的線,則記錄 scan_start_y 的值,準備跳出循環
  if pixel != last_pixel:
  scan_start_y = i - 50
  break
 if scan_start_y:
  break
 print('scan_start_y: {}'.format(scan_start_y))

 # 從 scan_start_y 開始往下掃描,棋子應位于屏幕上半部分,這里暫定不超過 2/3
 for i in range(scan_start_y, int(h * 2 / 3)):
 # 橫坐標方面也減少了一部分掃描開銷
 for j in range(scan_x_border, w - scan_x_border):
  pixel = im_pixel[j, i]
  # 根據棋子的最低行的顏色判斷,找最后一行那些點的平均值,這個顏
  # 色這樣應該 OK,暫時不提出來
  if (50 < pixel[0] < 60) \
   and (53 < pixel[1] < 63) \
   and (95 < pixel[2] < 110):
  piece_x_sum += j
  piece_x_c += 1
  piece_y_max = max(i, piece_y_max)

 if not all((piece_x_sum, piece_x_c)):
 return 0, 0, 0, 0
 piece_x = int(piece_x_sum / piece_x_c)
 piece_y = piece_y_max - piece_base_height_1_2 # 上移棋子底盤高度的一半

遍歷過程動態演示

python微信跳一跳開發中棋子定位像素遍歷的示例分析

實際運行動畫

以下是實際運行的定位動畫。

python微信跳一跳開發中棋子定位像素遍歷的示例分析

優缺點分析

像素遍歷的好處是無需額外的python庫,但其速度顯然明顯低于我在前面用過的其它方法,這不奇怪,外接庫用到的顏色識別方法其實是經過優化和集成的,像素遍歷是其底層的技術方案,速度慢理所當然。

改進

其實上述方法還可以進一步優化,以大大減小遍歷的面積:

  • 以50像素為間隔從1/3高度開始遍歷;

  • 當首次滿足給定的棋子顏色時,記錄x值的和與個數,平均后得到棋子的x值;

  • 沿x值從上向下對高度進行遍歷,可以得到滿足棋子顏色的最大y值和最小y值;

  • 對y值進行處理,如減去一個固定高度,即可得到棋子的底部中心y值;

  • 對最高點和最低點進行平均,即可得到棋盤的中心y值。

遍歷的過程如下:

python微信跳一跳開發中棋子定位像素遍歷的示例分析

以上是“python微信跳一跳開發中棋子定位像素遍歷的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

客服| 金川县| 咸宁市| 河北区| 久治县| 志丹县| 府谷县| 垦利县| 义乌市| 包头市| 广元市| 革吉县| 静乐县| 桐柏县| 丁青县| 敦化市| 呼图壁县| 社旗县| 嘉峪关市| 长宁区| 祁东县| 新和县| 木兰县| 双鸭山市| 临沭县| 郁南县| 洞口县| 仲巴县| 揭阳市| 嘉禾县| 汕头市| 望江县| 定兴县| 同德县| 衡南县| 昌邑市| 资讯| 大同市| 三穗县| 方城县| 武清区|