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

Python Roblox游戏机器人颜色识别异常问题求助

Roblox游戏机器人颜色像素检测问题解决

我正在为Roblox开发一款Python机器人,需求是当白色条悬浮在黄色条上方时按下空格键。但目前在颜色像素检测上存在问题:检测RGB值为(255,255,0)的像素时,会误识别浅绿色、白色等非黄色像素。

原代码

import random
import cv2
import keyboard
import numpy as np

game_img = cv2.imread('test.png', cv2.IMREAD_UNCHANGED)
dodge_img = cv2.imread('dodge8.png', cv2.IMREAD_UNCHANGED)

print(type(game_img))
print(game_img.shape)

for y in range(0,game_img.shape[0]):
    for x in range(0,game_img.shape[1]):
        if np.any(game_img[y][x] == [255,255,0]):
            game_img[y][x] = [random.randint(0,255),random.randint(0,255),random.randint(0,255)]

cv2.imshow("this", game_img)
cv2.waitKey(0)

相关图片

原始图片

原始图片

黄色像素修改后图片

黄色像素修改后图片

问题原因及解决办法

问题根源

  • OpenCV默认以BGR格式读取图片,你代码中检测的[255,255,0]实际是蓝色,而非目标黄色(黄色的BGR值为[0,255,255])。
  • 精确匹配单一RGB/BGR值容错率极低,游戏画面中的黄色会因光影、压缩产生色差,导致误判非黄色像素。

解决步骤

  1. 转换颜色空间:将BGR转为HSV格式,HSV对颜色的描述更贴合人眼感知,便于通过范围筛选目标颜色。
  2. 设定颜色范围:定义黄色在HSV中的区间,过滤掉非黄色像素。
  3. 优化检测效率:用向量运算替代逐像素循环,大幅提升处理速度。

修改后的代码示例:

import random
import cv2
import numpy as np

# 读取图片
game_img = cv2.imread('test.png', cv2.IMREAD_UNCHANGED)

# 转换为HSV颜色空间
hsv_img = cv2.cvtColor(game_img, cv2.COLOR_BGR2HSV)

# 定义黄色的HSV范围(可根据实际画面微调上下限)
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])

# 创建黄色像素掩码
mask = cv2.inRange(hsv_img, lower_yellow, upper_yellow)

# 将掩码中的黄色像素替换为随机颜色
game_img[mask > 0] = [random.randint(0,255), random.randint(0,255), random.randint(0,255)]

cv2.imshow("this", game_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

额外建议

  • 若需调整黄色范围,可通过以下代码获取标准黄色的HSV值,再微调上下限:
    print(cv2.cvtColor(np.uint8([[[0,255,255]]]), cv2.COLOR_BGR2HSV))
    
  • 实际游戏中建议用实时屏幕截图检测,可使用mss或pyautogui库代替读取本地图片,实现动态检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:01:18