如何解决使用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 举报,一经查实,本站将立刻删除。