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值容错率极低,游戏画面中的黄色会因光影、压缩产生色差,导致误判非黄色像素。
解决步骤
- 转换颜色空间:将BGR转为HSV格式,HSV对颜色的描述更贴合人眼感知,便于通过范围筛选目标颜色。
- 设定颜色范围:定义黄色在HSV中的区间,过滤掉非黄色像素。
- 优化检测效率:用向量运算替代逐像素循环,大幅提升处理速度。
修改后的代码示例:
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
相关产品推荐
相关产品推荐

