def getStatusSubjective(frame, team_color, shape_list, lamp_size): ''' 主観視点:イカランプの状態を取得する ''' # 記録リスト 0:dead 1:alive 2:sp status_list = ['nodata' for i in range(8)] # 基準色リスト [黒, チームカラー, スペシャル状態] lamp_color = [['blk', color, 'spw'] for color in team_color] # 8プレイヤー分 for i in range(8): # サイズと色のインデックスはiが3以下は0、4以上は1 idx = 0 if i<=3 else 1 size = lamp_size[idx] thd = lamp_color[idx] # イカランプ座標 left = C_lamp[size][i] - W_lamp['LL'] right = C_lamp[size][i] + W_lamp['LL'] top = T_lamp['subLL'] bottom = B_lamp['subLL'] TL = (left, top) BR = (right, bottom) # イカランプの形の画像 shape = shape_list[i] index = size_list.index(size) bin_shp = ika_list[index] if shape == 'ika' else oct_list[index] # 最も面積を占める色を取得 max_color = iip.getMostLargeColor(frame, TL, BR, thd, mask=bin_shp) # 最大の色のインデックス -> イカランプの状態 status = lamp_color[idx].index(max_color) # リストに記録 status_list[i] = status return status_list
def getStatusObjective(frame, team_color, lamp_size): ''' 俯瞰視点:イカランプの状態を取得する ''' # 記録リスト 0:dead 1:alive 2:sp status_list = ['nodata' for i in range(8)] # 基準色リスト [黒, チームカラー, スペシャル状態] lamp_color = [['blk', color, 'spw'] for color in team_color] # 8プレイヤー分 for i in range(8): # サイズなどのインデックスはiが3以下は0、4以上は1 idx = 0 if i<=3 else 1 # イカランプ座標 left = L_lamp[lamp_size[idx]][i] right = R_lamp[lamp_size[idx]][i] top = T_lamp['obj' + lamp_size[idx]] bottom = B_lamp['obj' + lamp_size[idx]] TL = (left, top) BR = (right, bottom) # 最も面積を占める色を取得 max_color = iip.getMostLargeColor(frame, TL, BR, lamp_color[idx]) # 最大の色のインデックス -> イカランプの状態 status = lamp_color[idx].index(max_color) # リストに記録 status_list[i] = status return status_list
def getTeamColor(frame): ''' 各チームの色を取得する ''' # 各チームの色 team_color = ['nodata', 'nodata'] # アルファとブラボー for i in range(2): # 対象は4プレイヤー分のイカランプ TL = (L_lamp['MM'][0+4*i], T_lamp['subMM']) BR = (R_lamp['MM'][3+4*i], B_lamp['subMM']) # 最も面積を占める色をチームカラー候補から取得 max_color = iip.getMostLargeColor(frame, TL, BR, color_catalog) # リストに記録 team_color[i] = max_color return team_color
def getControl(frame, team_color): ''' エリアの確保状況を取得する ''' # エリアの確保状況 in control -> 0:neutral 1:alfa 2:bravo control = 0 # アルファとブラボー for i in range(2): # 色候補:通常は黒、確保中はチームカラー color_list = ['blk', team_color[i]] # カウント表示位置 TL = (L_cnt[i], T_cnt[0]) BR = (R_cnt[i], B_cnt[0]) # 最も面積を占める色を色候補から取得 max_color = iip.getMostLargeColor(frame, TL, BR, color_list) # チームカラーと同じ色なら確保中 if max_color == team_color[i]: control = i + 1 return control