微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用OpenCV和PyAutoGUI构建的我的屏幕录像机仅记录一帧

如何解决使用OpenCV和PyAutoGUI构建的我的屏幕录像机仅记录一帧

我正在使用numpy,OpenCV和pyautogui在Python中构建一个屏幕录像机。我已经将tkinter用于GUI。我的屏幕录像机的问题在于,当我单击“记录屏幕”按钮时,它只能记录一帧,然后屏幕被卡住,无法执行任何操作。到目前为止,这是我的代码

from tkinter import *
import cv2
import numpy as np
import pyautogui

resolution = (1366,768)

指定视频编解码器:

codec = cv2.VideoWriter_fourcc(*"XVID")

指定输出文件名称

filename = "Recordings.avi"

指定帧速率(我们可以选择任何值并进行实验):

fps = 30.0

创建一个VideoWriter对象:

out = cv2.VideoWriter(filename,codec,fps,resolution)

def startRecording():
  
  window.iconify()
  while True:
    img = pyautogui.screenshot()

    # Convert the screenshot to a numpy array
    frame = np.array(img)

    # Convert it from BGR(Blue,Green,Red) to
    # RGB(Red,Blue)
    
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

    # Write it to the output file
      out.write(frame)

def stopRecording():
  cv2.destroyAllWindows()
  out.release()
  window.destroy()



window = Tk()
window.title("Screen Recorder")
window.geometry("400x150")
window.config(bg='pink')

recordButton = Button(window,text="Record(F9)",font=("Bell MT",20),width=20,command=startRecording)
recordButton.pack(pady=(10,0))

stopButton = Button(window,text="Stop(F10)",command=stopRecording)
stopButton.pack(pady=(10,0))

mainloop()

解决方法

您不能在按钮回调中进行阻止呼叫。 如您所写,SELECT col,REGEXP_SUBSTR(col,'[,:](.+?)[,:]',1,NULL,1) AS middle_num FROM yourTable; 将永远不会结束,因此将阻塞tkinter mainloop。录制可能有效,但是您的UI变得无响应。

最好的拍摄方法是安排录制时间(寻找after方法):每x毫秒录制一帧。

这是一个基于原始代码的简化示例(您需要完成它)

startRecording

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。