python学习笔记——根据部分图片,定位在原图的位置

该篇博客介绍了如何利用Python的aircv库进行图像匹配,结合PyMouse实现自动点击功能。在钢琴块2游戏的案例中,通过截图、识别小图片在大图中的位置并进行鼠标点击,实现了自动玩小游戏的功能。代码示例展示了从识别开始按钮到点击黑色方块的过程,并强调了调整匹配度以确保准确性的关键。此外,还提及在安卓模拟器上的应用效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 主要代码:

import aircv as ac

# 匹配图片,返回包含位置的数据字典
def matchImg(imgsrc, imgobj, confidencevalue=0.5):  # imgsrc=原始图像,imgobj=待查找的图片
    imsrc = ac.imread(imgsrc)
    imobj = ac.imread(imgobj)
    match_result = ac.find_template(imsrc, imobj,confidencevalue)  # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}
    return match_result

安装库

pip install opencv-python
pip install  aircv

钢琴块2案例代码:

注意:以管理员身份启动

 

import aircv as ac
from pymouse import PyMouse
from PIL import ImageGrab
import time

'''
1.截图
2.根据小图片 识别它在大图片中的位置 
3.鼠标移到点击
'''

# 匹配图片,返回包含位置的数据字典 的列表 a=[{},{},{}]
def matchImg(imgsrc, imgobj, confidencevalue=0.9):  # imgsrc=原始图像,imgobj=待查找的图片
    imsrc = ac.imread(imgsrc)
    imobj = ac.imread(imgobj)
    match_result = ac.find_all_template(imsrc, imobj,confidencevalue)  # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}
    return match_result

m = PyMouse()#获取鼠标

#1.截图
bbox = (0, 50, 555, 880)
im = ImageGrab.grab(bbox)
im.save('yx.jpg')
time.sleep(5)

# ===========点击开始===========
xyt = matchImg('yx.jpg', '003.jpg')[0]  # a=[{}]返回字典的数据的列表,获取第0项{}
if xyt != None: #使用判断也不要使用异常,异常影响效率。
    x = xyt['result'][0]#result对应的值,对应捕捉图像的中心位置
    y = xyt['result'][1]
    # 3.点击
    m.click(int(x), int(y)+50)  # 这里的数据类型必须是整数,否则报错


while True:
#for i in range(1500):
    #1.截图
    bbox = (0, 50,555, 880)
    im = ImageGrab.grab(bbox)
    im.save('yx.jpg')

    #===========点击黑色方块===========
    xyts = matchImg('yx.jpg', '009.jpg')  # 返回字典的数据 的列表
    for xyt in xyts:
        if xyt != None: #使用判断也不要使用异常,异常影响效率。
            x = xyt['result'][0]#result对应的值,对应捕捉图像的中心位置
            y = xyt['result'][1]

            # 3.点击
            if x < 555 and y>100:#防止点到窗口上边缘
                m.click(int(x), int(y)+50)  # 这里的数据类型必须是整数,否则报错


009.jpg

003.jpg

使用安卓模拟器(效果图如下)

注意:

每张图片的匹配度有所不一样测试符合识别目标图片的匹配度。通常0.95可达到完全匹配。

import aircv as ac
from pymouse import PyMouse
from PIL import ImageGrab
import time

'''
1.截图
2.根据小图片 识别它在大图片中的位置 
3.鼠标移到点击
'''

# 匹配图片,返回包含位置的数据字典 的列表 a=[{},{},{}]
def matchImg(imgsrc, imgobj, confidencevalue=0.95):  # imgsrc=原始图像,imgobj=待查找的图片
    imsrc = ac.imread(imgsrc)
    imobj = ac.imread(imgobj)
    match_result = ac.find_all_template(imsrc, imobj,confidencevalue)  # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}
    return match_result

m = PyMouse()#获取鼠标

#1.截图
bbox = ()
im = ImageGrab.grab(bbox)
im.save('yx.jpg')
time.sleep(3)

# ===========点击开始===========
xyt = matchImg('yx.jpg', '1001.jpg',0.95)#[0]  # a=[{}]返回字典的数据的列表,获取第0项{}
for i in xyt:
    print(i)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值