def click_image(image, notify=True):
if notify:
_notify("starting to click " + image)
if isinstance(image, str) or isinstance(image, unicode):
template = cv2.imread(image, 0)
elif isinstance(image, PngImageFile):
pass # need to convert to cv2 image type
sleep(2)
#GET SCREENSHOT
call(["gnome-screenshot", "--file=/tmp/beryl.png"])
sleep(1)
#FIND LOCATION OF NAME
source = cv2.imread('/tmp/beryl.png', 0)
points = []
w, h = template.shape[::-1]
methods = [cv2.TM_CCOEFF,cv2.TM_CCOEFF_NORMED,cv2.TM_CCORR,cv2.TM_CCORR_NORMED,cv2.TM_SQDIFF,cv2.TM_SQDIFF_NORMED]
for method in methods:
# Apply Template Matching
result = cv2.matchTemplate(source.copy(), template, method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
#If the method is TM_SQDIFF or TM_SQDIFF_NORMED, take minimum
if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
top_left = min_loc
else:
top_left = max_loc
#bottom_right = (top_left[0] + w, top_left[1] + h)
# (x,y)
point = ( top_left[0] + (float(w)/2), top_left[1] + (float(h)/2) )
points.append(point)
best_point = sorted([(point, avg_distance(point, points)) for point in points], key=lambda tup: tup[1])[0][0]
click_location(best_point)
if notify:
_notify("finished clicking image")
评论列表
文章目录