You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python检测屏幕固定区域是否存在指定颜色的通知圆点

固定区域通知圆点检测误判排查

问题描述

  • 实现目标:检测网站页面对应屏幕固定位置是否存在指定颜色的通知圆点
  • 故障现象:参考屏幕黑白点检测方案编写的代码存在恒定误判,区域内不存在目标圆点时也会判定检测到目标
  • 已尝试操作:调整过cv2相关的BGR/RGB通道顺序参数,未确认numpy数组是否受通道顺序影响,暂未定位错误原因

根因分析

代码存在3个直接导致误判的问题:

  1. 判断逻辑永远为真:zip(x,y)返回的是迭代器对象,Python中无论迭代器内部是否有元素,直接做布尔判断都会返回True,这是恒定误判的核心原因。
  2. 颜色匹配逻辑错误:直接写img==(173,95,255)会逐个通道做独立匹配,只要任意一个通道值和目标值相等就会标记为匹配点,没有要求三个通道同时符合目标颜色,极易产生误匹配。
  3. 通道顺序认知偏差:pyautogui的screenshot返回的是PIL Image格式,转numpy数组后默认通道顺序为RGB,和cv2默认的BGR顺序不同,如果按BGR顺序填写颜色值,本身就匹配不到正确的目标颜色。

修正后可运行代码

import numpy as np
import pyautogui as pya

def detect_notification_dot():
    # 截取目标固定区域
    screen = pya.screenshot(region=(550, 90, 30, 50))
    img = np.array(screen)
    # RGB三通道同时精确匹配目标颜色,pyautogui截图为RGB顺序无需做通道转换
    color_match_mask = (img[:, :, 0] == 173) & (img[:, :, 1] == 95) & (img[:, :, 2] == 255)
    match_y, match_x = np.where(color_match_mask)
    match_points = list(zip(match_x, match_y))
    print(match_points)
    # 实际匹配到的点数量大于0时才判定存在目标圆点
    return len(match_points) > 0

优化提示

如果页面渲染存在抗锯齿、透明叠加导致目标圆点颜色有轻微偏移,可将精确值匹配替换为HSV颜色空间的范围匹配,设置合理的颜色容差即可大幅提升检测稳定性,不会因为微小的颜色波动漏检。

内容的提问来源于stack exchange,提问作者JustDante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:12:28