-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcv.py
93 lines (79 loc) · 3.25 KB
/
cv.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import cv2, numpy as np
from utils import *
import matplotlib.pylab as plt
import os
import uiautomator2 as u2
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
class UIMatcher:
@staticmethod
def RotateClockWise90(img):
trans_img = cv2.transpose(img)
new_img = cv2.flip(trans_img, 0)
return new_img
@staticmethod
def findpic(screen,template_paths = ['img/tiaoguo.jpg']):
#返回相对坐标
'''
检测各种按钮(头像?)
@return: 中心坐标lists, 对应的可信度list
'''
zhongxings = []
max_vals = []
# 增加判断screen方向
if screen.shape[0]>screen.shape[1]:
screen = UIMatcher.RotateClockWise90(screen)
screen_show = screen.copy()
# screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY)
# plt.imshow(screen)
# plt.show()
for template_path in template_paths:
template = cv_imread(template_path)
# template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)cv_imread
h, w = template.shape[:2] # rows->h, cols->w
res = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
x = (max_loc[0]+w//2)/screen.shape[1]
y = (max_loc[1] + h // 2) / screen.shape[0]
zhongxings.append([x,y])
max_vals.append(max_val)
if max_val>0.8:
cv2.rectangle(screen_show, (int(max_loc[0]), int(max_loc[1])), (int(max_loc[0]+w),int(max_loc[1]+h)), (0, 0, 255), 2)
cv2.putText(screen_show,str(round(max_val, 3))+os.path.basename(template_path),(int(max_loc[0]), int(max_loc[1])-2),cv2.FONT_HERSHEY_SIMPLEX,0.3, (0, 0, 255),1)
# cv2.rectangle(screen, (0, 0), (10, 10), (0, 0, 255), 2)
plt.cla()
img4 = cv2.cvtColor(screen_show, cv2.COLOR_BGR2RGB)
plt.imshow(img4)
plt.pause(0.01)
# if max_val>yuzhi:
# match_flag = 1
# else:
# match_flag = 0
# ax.hist(res.reshape(-1,1), 100, facecolor='b', alpha=0.5, label="rand_mat")
# plt.show()
return zhongxings,max_vals
@staticmethod
def find_gaoliang(screen):
'''
检测高亮位置(忽略了上板边,防止成就栏弹出遮挡)
@return: 高亮中心相对坐标[x,y]
'''
if screen.shape[0] > screen.shape[1]:
screen = UIMatcher.RotateClockWise90(screen)
gray = cv2.cvtColor(screen, cv2.COLOR_RGB2GRAY)
ret, binary = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)
index_1 = np.mean(np.argwhere(binary[63:,:] == 255), axis=0).astype(int)
screen = cv2.cvtColor(binary, cv2.COLOR_GRAY2RGB)
cv2.circle(screen, (index_1[1], index_1[0] + 63), 10, (255, 0, 0), -1)
plt.cla()
plt.imshow(screen)
plt.pause(0.01)
print(len(np.argwhere(binary == 255)),len(np.argwhere(binary == 0)))
return index_1[1]/screen.shape[1], (index_1[0]+63)/screen.shape[0]
#
# d = u2.connect()
# screen = d.screenshot(format="opencv")
# # screen = cv_imread('test.jpg')
# UIMatcher.find_gaoliang(screen)
# plt.show()