如何使用python检查某个图像是否在屏幕上

问题描述 投票:0回答:2

所以我试图检查网站屏幕固定位置是否有通知点。

我在这里发现了另一个问题,试图在屏幕上找到黑白点,我尝试了它,但是它在不应该找到的时候找到了点,所以我不知道我做错了什么,我尝试切换值由于 cv2 中的 BGR/RGB 问题,但这不应该是 numpy 的问题吗?我不知道,请帮忙。

这是我的代码:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
import pyautogui as pya

def test():
    screen = pya.screenshot(region=(550, 90, 30, 50))
    # screen.show()
    img = np.array(screen)
    x, y, z = np.where(img==(173,95,255))
    points = zip(x,y)
    print(points)
    
    if points:
        return True
    else:
        return False
python numpy image-processing computer-vision pyautogui
2个回答
4
投票

找到了一个好的解决方案。

截取带有您要查找的小点的图标。

这是我的打印屏幕:

然后,您将该屏幕截图放在与 Python 代码相同的文件夹中,并将其命名为 notification.png

然后,在屏幕上打开网站的情况下运行此代码(使用此代码,我们将找到包含您刚刚在图标+通知点上拍摄的打印屏幕的框的坐标):

import pyautogui
import time

time.sleep(1)
location = pyautogui.locateOnScreen('notification.png')
print(location)

就我而言,我收到以下输出(坐标):

Box(left=1474, top=109, width=52, height=52)

然后,我们将执行以下操作。检查此通知图像是否出现在屏幕的同一位置,因此我们只需执行以下操作:

import pyautogui
import time
r = None
while r is None:
    try:
        location = pyautogui.locateOnScreen('notification.png')
        if str(location) == "Box(left=1474, top=109, width=52, height=52)":
            print("found Image!")
        else:
            print("Not found Image!")
        break
    except Exception as e:
        r = None

如果在屏幕上找到图像,则会显示找到图像,如果没有,则显示未找到。 如果您使用 2 个屏幕,渲染可能需要一段时间。 因此,您可以设置一个计时器来中断脚本,以防您认为在未找到的情况下花费的时间太长,或者您可以限制搜索区域。


0
投票

enter image description here

请检查一下 我需要你的帮助 尽快

© www.soinside.com 2019 - 2024. All rights reserved.