python adb + opencv 直接获取截屏数据

本文介绍了如何通过Python的ADB模块配合OpenCV直接获取手机截屏数据,避免了先保存再传输的步骤。在方案二中,通过ADB获取到的数据流在Windows环境下因字符转义导致图片无法识别,通过对数据流的处理,成功用OpenCV的imdecode方法加载图片。
摘要由CSDN通过智能技术生成

方案一

一种方法是先通过 adb screencap 将截屏保存到手机里。再通过 adb pull 将图片从手机传输到本地,具体命令如下:

adb screencap -p > /sdcard/screen.png
adb pull /sdcard/screen.png ./screen.png

然后再用 OpenCV 读取图片即可使用。  
不过对于需要直接操作图片的情况,这个方法就有点多此一举了。直接传输流数据的方案二就更为合适。

方案二

获取文件数据

screencap -p 可以将截屏的数据流直接输出,尝试运行了如下adb命令, 确实得到了屏幕截图:

adb shell screencap -p > /sdcard/screen.png

这样就可以通过 stdout 来获取图片了,尝试通过 Python 获取截屏并保存:

#adb调用获取截图数据流, ps: 127.0.0.1:7555 为手机的端口号,这里我使用模拟器来测试
process = subprocess.Popen(
    ['adb', '-s', '127.0.0.1:7555', 'shell', 'screencap', '-p'],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
)
stdout = proc.stdout.read()

#保存图片
with open('./
要通过PythonOpenCV快速拼接出完整的长截屏图片,我们可以按照以下步骤进行: 首先,使用Python中的手机录屏工具(如Android Debug Bridge,简称ADB)来录制手机屏幕的视频。首先需要在电脑上安装并配置好ADB工具。 其次,使用Python中的OpenCV库来读取录制好的视频文件。可以使用OpenCV的VideoCapture函数来从视频文件中提取每一帧图像。 然后,根据视频的帧数和分辨率,确定长截屏图片的尺寸。也就是将所有的帧图像按序拼接为一个完整的长截屏图片。 接下来,创建一个空白的长截屏图片,使用OpenCV的imwrite函数将第一帧图像保存到长截屏图片中。 对于其余的帧图像,可以使用OpenCV的addWeighted函数将它们逐一拼接到长截屏图片的尾部。根据移动设备的屏幕方向和滑动方向,可以选择水平或垂直拼接。 最后,保存生成的长截屏图片。 需要注意的是,在拼接过程中,可能会出现图像大小不匹配的情况。可以使用OpenCV的resize函数来调整每个帧图像的大小,使其与长截屏图片的大小一致。 另外,在实际运行过程中,可能还需要根据手机录制视频的帧率和帧间隔等参数来调整拼接速度和图片质量。 综上所述,通过PythonOpenCV,我们可以实现快速拼接出完整的长截屏图片。这样就可以方便地将手机屏幕内容保存为单个长图,便于查看和分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值