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

如何在Python中直接显示ADB截图(无需生成文件)

解决方案:直接显示ADB Screencap截图(无需生成文件)

首先,你遇到的TypeError: buf is not a numpy array, neither a scalar错误,核心原因是cv2.imdecode()需要接收numpy数组作为输入,但proc.stdout.read()返回的是原生字节(bytes)对象,直接传入就会触发类型错误。另外还要注意Windows环境下ADB的一个坑:screencap -p输出的图片数据会把换行符从\n转换成\r\n,这会导致图片格式损坏,必须先修正这个问题。

下面是修正后的完整代码,分步骤解释:

步骤1:导入必要模块

确保你已经安装了所需模块(你的环境里应该已经存在):

import subprocess
import shlex
import numpy as np
import cv2

步骤2:获取并处理ADB截图字节数据

  • 执行ADB命令获取截图的字节流
  • 修复Windows下的换行符问题(把\r\n换回\n)
  • 将bytes对象转换为numpy数组(uint8类型,符合图像数据格式)
command = r"adb shell screencap -p"
proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
# 读取完整的输出字节流(不带参数会读取全部内容,比固定上限更可靠)
out = proc.stdout.read()
# 修复Windows下的换行符问题:ADB会把\n转成\r\n,导致图片损坏
out = out.replace(b'\r\n', b'\n')
# 将bytes转换为numpy数组,dtype设为uint8
img_array = np.frombuffer(out, dtype=np.uint8)

步骤3:解码并显示图片

现在可以用cv2.imdecode()处理numpy数组,然后显示:

img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
if img is not None:
    cv2.imshow("ADB Screencap", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("图片解码失败,请检查ADB连接或设备状态")

完整可运行代码

import subprocess
import shlex
import numpy as np
import cv2

def show_adb_screencap():
    command = r"adb shell screencap -p"
    proc = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
    out = proc.stdout.read()
    # 修复Windows环境下的换行符问题
    out = out.replace(b'\r\n', b'\n')
    img_array = np.frombuffer(out, dtype=np.uint8)
    img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
    
    if img is not None:
        cv2.imshow("ADB Screencap", img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    else:
        print("无法解码截图,请确认:1. 设备已通过ADB连接;2. 设备已授权;3. ADB版本兼容")

if __name__ == "__main__":
    show_adb_screencap()

额外注意事项

  • 先用adb devices命令验证设备是否已成功连接并授权
  • 如果还是解码失败,可以尝试替换命令为adb exec-out screencap -p,exec-out可以避免一些shell中转的问题:
command = r"adb exec-out screencap -p"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:02