-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathImageProc.py
45 lines (34 loc) · 1.5 KB
/
ImageProc.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
import cv2, numpy
# 从source图片中查找wanted图片所在的位置,当置信度大于accuracy时返回找到的最大置信度位置的左上角坐标
def locate(source, wanted, accuracy=0.90):
screen_cv2 = cv2.imread(source)
wanted_cv2 = cv2.imread(wanted)
result = cv2.matchTemplate(screen_cv2, wanted_cv2, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
if max_val >= accuracy:
return max_loc
else:
return None
# 从source图片中查找wanted图片所在的位置,当置信度大于accuracy时返回找到的所有位置的左上角坐标(自动去重)
def locate_all(source, wanted, accuracy=0.90):
loc_pos = []
screen_cv2 = cv2.imread(source)
wanted_cv2 = cv2.imread(wanted)
result = cv2.matchTemplate(screen_cv2, wanted_cv2, cv2.TM_CCOEFF_NORMED)
location = numpy.where(result >= accuracy)
ex, ey = 0, 0
for pt in zip(*location[::-1]):
x = pt[0]
y = pt[1]
if (x - ex) + (y - ey) < 15: # 去掉邻近重复的点
continue
ex, ey = x, y
loc_pos.append([int(x), int(y)])
return loc_pos
# 给定目标尺寸大小和目标左上角顶点坐标,即可给出目标中心的坐标
def centerOfTouchArea(wantedSize, topLeftPos):
tlx, tly = topLeftPos
h_src, w_src, tongdao = wantedSize
if tlx < 0 or tly < 0 or w_src <=0 or h_src <= 0:
return None
return (tlx + w_src/2, tly + h_src/2)