import subprocess import cv2 import numpy as np import time import calendar #从手机获取二进制图片 def get_app_img(): # 从ADB获取屏幕图像 try: output = subprocess.check_output('adb exec-out screencap -p', shell=True) # 处理 output 中的数据 except subprocess.CalledProcessError as e: print('Error:', e) except Exception as e: print('Unexpected error:', e) return output #获取每一张图片的三维数据 def get_imgdecdoe(): output = get_app_img() # print("------output-----{}".format(output)) # 将输出转换为图像 image1 = cv2.imdecode(np.fromstring(output, dtype='uint8'), cv2.IMREAD_COLOR) # print(image) # #缩小图片的大小 image = cv2.resize(image1, (int(1080 / 3), int(2340 / 3))) return image def app_video(): save_path=r"E:\myTool\appium_xiangmu\test_video" ts=calendar.timegm(time.gmtime()) videoname = str(ts)+ ".mp4" save_file_path = '{}\\{}'.format(save_path, videoname) #保存视频 fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式) video = cv2.VideoWriter(save_file_path, fourcc, 5, (int(1080/3),int(2340/3))) try: while True: image = get_imgdecdoe() # 显示图像 cv2.imshow('Screen', image) # 按下ESC键退出循环 if cv2.waitKey(1) == 27: break image=get_imgdecdoe() video.write(image) finally: video.release() #释放 print("________视频处理完毕_______:视频号显示:{}".format(videoname)) cv2.destroyAllWindows() if __name__ == '__main__': app_video(),缺少录制时用户的点击的提示怎么处理,有实例代码吗
时间: 2024-03-13 10:44:11 浏览: 121
如果想要在录制的视频中添加用户的点击提示,可以使用cv2.circle()函数在视频中绘制一个圆圈来表示用户的点击。具体实现可以在获取到每一张图片的时候,判断手机屏幕是否有点击事件发生,如果有,则在该图片上绘制一个圆圈。以下是一个示例代码:
```
import subprocess
import cv2
import numpy as np
import time
import calendar
# 从手机获取二进制图片
def get_app_img():
# 从ADB获取屏幕图像
try:
output = subprocess.check_output('adb exec-out screencap -p', shell=True)
# 处理 output 中的数据
except subprocess.CalledProcessError as e:
print('Error:', e)
except Exception as e:
print('Unexpected error:', e)
return output
# 获取每一张图片的三维数据
def get_imgdecdoe():
output = get_app_img()
# 将输出转换为图像
image1 = cv2.imdecode(np.fromstring(output, dtype='uint8'), cv2.IMREAD_COLOR)
# 缩小图片的大小
image = cv2.resize(image1, (int(1080 / 3), int(2340 / 3)))
return image
# 在图片上绘制圆圈
def draw_circle(image, x, y):
# 设置圆圈的颜色和半径
color = (0, 0, 255)
radius = 10
# 在图片上绘制圆圈
cv2.circle(image, (x, y), radius, color, -1)
def app_video():
save_path=r"E:\myTool\appium_xiangmu\test_video"
ts=calendar.timegm(time.gmtime())
videoname = str(ts)+ ".mp4"
save_file_path = '{}\\{}'.format(save_path, videoname)
#保存视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
video = cv2.VideoWriter(save_file_path, fourcc, 5, (int(1080/3),int(2340/3)))
try:
while True:
# 获取当前的屏幕图像
image = get_imgdecdoe()
# 判断是否有点击事件发生
# 这里假设点击事件的坐标为 (x, y)
if 点击事件发生:
# 在图片上绘制圆圈
draw_circle(image, x, y)
# 显示图像
cv2.imshow('Screen', image)
# 按下ESC键退出循环
if cv2.waitKey(1) == 27:
break
# 将图片写入视频文件
video.write(image)
finally:
# 释放视频文件
video.release()
print("________视频处理完毕_______:视频号显示:{}".format(videoname))
cv2.destroyAllWindows()
if __name__ == '__main__':
app_video()
```
在上面的代码中,我们定义了一个 `draw_circle()` 函数,用于在图片上绘制圆圈。然后在每次获取到屏幕图像时,判断是否有点击事件发生,如果有,则在该图片上绘制一个圆圈。最后将图片写入视频文件即可。
阅读全文