python屏幕找图_python 区域找图是什么思路

展开全部

可以参2113考5261如下代码4102:import os

from time import sleep

from myopencv import Image

import X

import gdkutils

class XAuto:

_screensize = None

def __init__(self, tmp_img='/tmp/tmp%d.png' % os.getpid(),

default_threshold=0.7, default_rect=None):

self.d = X.Display()

self.tmp_img = tmp_img

self.default_threshold = default_threshold

self.default_rect = default_rect

def find_and_click(self, *args, back=False, **kwargs):

pos = self.find(*args, **kwargs)

if pos:

if back:

self.click_and_back(pos)

else:

self.click(pos)

return pos

def find_and_moveto(self, *args, **kwargs):

pos = self.find(*args, **kwargs)

if pos:

self.moveto(pos)

return pos

def click(self, pos=None, button=X.LEFT_BUTTON):

d = self.d

if pos is not None:

d.motion(pos)

d.button(button)

d.flush()

def wait(self, seconds):

sleep(seconds)

def click_and_back(self, pos, button=X.LEFT_BUTTON):

d = self.d

old_pos = d.getpos()

d.motion(pos)

d.button(button)

d.motion(old_pos)

d.flush()

def moveto(self, pos):

d = self.d

d.motion(pos)

d.flush()

def key(self, keyname):

d = self.d

d.key(keyname)

d.flush()

def find(self, img, threshold=None, rect=None, repeat=1, interval=0.2):

if isinstance(img, str):

img = Image(img)

if rect is None:

rect = self.default_rect or (0, 0) + self.screensize

if threshold is None:

threshold = self.default_threshold

tmp_img = self.tmp_img

for _ in range(repeat):

gdkutils.screenshot(tmp_img, rect)

sc = Image(tmp_img)

(x, y), similarity = sc.match(img)

if similarity > threshold:

x += rect[0]

y += rect[1]

x += img.width // 2

y += img.height // 2

return x, y

sleep(interval)

return False

@1653property

def screensize(self):

return self._screensize or gdkutils.get_screen_size()

def __del__(self):

try:

os.unlink(self.tmp_img)

except OSError:

pass

def monitor_size(self, *args, **kwargs):

return gdkutils.get_monitor_size(*args, **kwargs)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值