Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1047|回复: 1

python 截屏录屏

[复制链接]

391

主题

1222

帖子

3902

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3902
发表于 2023-6-4 15:21:35 | 显示全部楼层 |阅读模式
直接运行版
  1. import pyautogui
  2. import cv2
  3. import numpy as np
  4. import datetime
  5. import time
  6. def get_datetime_str(style='dt'):
  7.     cur_time = datetime.datetime.now()

  8.     date_str = cur_time.strftime('%y%m%d')
  9.     time_str = cur_time.strftime('%H%M%S')

  10.     if style == 'data':
  11.         return date_str
  12.     elif style == 'time':
  13.         return time_str
  14.     else:
  15.         return date_str + '_' + time_str

  16. path = "D:/image/"

  17. num_frame = 200
  18. vw = cv2.VideoWriter(path+get_datetime_str()+'video.avi', cv2.VideoWriter_fourcc('I','4','2','0'), 8,(800,450))
  19. while num_frame:
  20.     print(num_frame)
  21.     num_frame = num_frame-1
  22.     #img = pyautogui.screenshot(region=[300,50, 500, 500])
  23.     img = pyautogui.screenshot()
  24.     # 分别代表:左上角坐标,宽高
  25.     img=img.resize((800,450))
  26. #   img.save(path+get_datetime_str()+".jpg")
  27.     #转成视频
  28.     #对获取的图片转换成二维矩阵形式,后再将RGB转成BGR
  29.     #因为imshow,默认通道顺序是BGR,而pyautogui默认是RGB所以要转换一下,不然会有点问题
  30.     img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)   
  31.     vw.write(img)
  32.     time.sleep(1);
  33. vw.release()
  34. #cv2.imshow("截屏",img)

  35. #cv2.waitKey(0)

复制代码
回复

使用道具 举报

391

主题

1222

帖子

3902

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3902
 楼主| 发表于 2023-6-4 17:11:51 | 显示全部楼层
主界面
  1. from tkinter import *
  2. import pyautogui
  3. import cv2
  4. import numpy as np
  5. import datetime
  6. import time
  7. from screenObj import *
  8. top = Tk()
  9. top.title("考核实况记录表")
  10. top.geometry('300x100')

  11. txt = StringVar()
  12. b1=Entry(top,width=20)
  13. b1.pack()
  14. b3=Entry(top,width=20, textvariable=txt)
  15. b3.pack()

  16. sco = screenObj(txt)
  17. def start_screen():
  18.     sco.setText(b1.get())
  19.     print(b1.get())
  20.     sco.start_screen()
  21.     pass


  22. def stop_screen():
  23.     sco.stop_screen()
  24.     txt.set('录制停止')
  25.     pass
  26. #添加按钮1
  27. first = Button(top, text="开始录制", fg="tomato", command=start_screen)
  28. first.pack()
  29. #添加按钮2
  30. second = Button(top, text="停止录制", fg="tomato", command=stop_screen)
  31. second.pack()
  32. top.mainloop()
复制代码


录屏程序
  1. import pyautogui
  2. import cv2
  3. import numpy as np
  4. import datetime
  5. import time
  6. import threading
  7. def get_datetime_str(style='dt'):
  8.     cur_time = datetime.datetime.now()

  9.     date_str = cur_time.strftime('%y%m%d')
  10.     time_str = cur_time.strftime('%H%M%S')

  11.     if style == 'data':
  12.         return date_str
  13.     elif style == 'time':
  14.         return time_str
  15.     else:
  16.         return date_str + '_' + time_str
  17. class screenObj():
  18.     def __init__(self,txt = '测试'):
  19.         self.path = "D:/image/"      
  20.         self.txt  = txt
  21.         
  22.     def setText(self,mark):        
  23.         self.mark  = mark
  24.         
  25.     def start_screen(self):
  26.         self.vw = cv2.VideoWriter(self.path+self.mark+get_datetime_str()+'.avi',
  27.                                   cv2.VideoWriter_fourcc('I','4','2','0'), 8,(800,450))
  28.         self.on_screen = True
  29.         threading.Thread(target = self.screen_loop).start()
  30.         
  31.     def stop_screen(self):
  32.         self.on_screen = False
  33.         
  34.     def screen_loop(self):
  35.         self.frame = 1
  36.         while self.on_screen:
  37.             print("帧数"+str(self.frame))
  38.             self.txt.set('已经录制'+str(self.frame)+'秒')
  39.             self.frame = self.frame + 1
  40.             img = pyautogui.screenshot()
  41.             # 分别代表:左上角坐标,宽高
  42.             img=img.resize((800,450))
  43.             img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
  44.             cv2.putText(img,text= self.mark ,org=(40, 90),
  45.                         fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale= 2,
  46.                         color=(255,0,0),thickness=10,lineType=cv2.LINE_4)

  47.             self.vw.write(img)
  48.             time.sleep(1);
  49.         self.vw.release()
  50.         print("录制结束")
  51.    
  52. if __name__ == '__main__':
  53.     sco = screenObj()
  54.     sco.setText('aaa')
  55.     sco.start_screen()
  56.     time.sleep(5)
  57.     sco.stop_screen()
  58.    

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-4-13 00:41 , Processed in 0.035913 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表