python怎么实现找图_python 区域找图是什么思路

匿名用户

1级

2017-06-10 回答

可以参考如下代码:

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

@property

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值