Python游戏录屏代码运行无反应且无报错问题排查
游戏画面捕获无反应无报错的排查方案
问题场景
运行以下代码捕获GTA5窗口画面时,程序启动后无任何可见反应,也没有报错信息输出:
import numpy as np from PIL import ImageGrab import cv2 import time def screen_record(): last_time = time.time() while(True): # 800x600 windowed mode for GTA 5, at the top left position of your main screen. # 40 px accounts for title bar. printscreen = np.array(ImageGrab.grab(bbox=(0,40,800,640))) print('loop took {} seconds'.format(time.time()-last_time)) last_time = time.time() cv2.imshow('window',cv2.cvtColor(printscreen, cv2.COLOR_BGR2RGB)) if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break screen_record()
可能的原因及解决办法
- 捕获区域不匹配:代码里
bbox=(0,40,800,640)是硬编码的800x600窗口(扣除40px标题栏),如果你的游戏窗口位置、尺寸不对,ImageGrab抓的是空白区域,cv2窗口要么全黑要么被桌面覆盖,看起来像没反应。先确认游戏是800x600窗口模式且左上角在屏幕(0,40)位置,或者直接改成(0,0,1920,1080)捕获整个屏幕测试。 - 权限不匹配:如果游戏是管理员身份运行,普通权限的Python程序抓不到它的画面,ImageGrab会返回空帧。右键Python解释器或IDE,选择“以管理员身份运行”再执行脚本。
- 显示窗口被遮挡:cv2创建的
window窗口可能被游戏窗口完全盖住,导致你误以为程序没反应。在循环里加一行cv2.moveWindow('window', 800, 0),把显示窗口移到游戏旁边就能看到。 - 颜色转换错误:ImageGrab获取的是RGB格式图像,cv2默认用BGR显示,代码里用
COLOR_BGR2RGB会导致颜色反转,极端情况可能显示全黑。改成cv2.COLOR_RGB2BGR就能正常显示。 - 循环卡顿或阻塞:先注释掉cv2相关代码,只保留
print语句,看控制台有没有输出loop took...。如果没输出,说明卡在ImageGrab.grab()了;如果有输出,问题出在cv2显示环节。 - Pillow兼容性问题:某些Pillow版本在Win10/11上的
ImageGrab.grab()存在bug,无法正常捕获屏幕。执行pip install --upgrade pillow更新到最新版本,或者换成mss库替代ImageGrab。
内容的提问来源于stack exchange,提问作者DIKTOR
相关产品推荐
相关产品推荐

