【发布时间】:2021-03-21 20:10:10
【问题描述】:
我尝试在 QLabel 上显示视频帧,我使用 opencv videocaptue 并使用 Qtimer 在 QLabel 中显示帧。但是帧来得太慢了,他们来晚了大约 5 秒。
这是我的类构造函数:
self.vid = cv2.VideoCapture(0)
self.timer = QTimer()
self.timer.timeout.connect(self.record)
这是我的记录功能,每秒调用一次self.timer.start(1000):
def record(self):
start = time.time()
self.parent.timerLabel.setTimerText()
ret, frame = self.vid.read()
new = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.parent.setImageToLabel(new)
end = time.time()
print(end - start)
setImageToLabel 函数:
def setImageToLabel(self, frame):
if type(frame) == str:
pixmap = QPixmap(QImage(frame))
pixmap = pixmap.scaled(320, 240)
self.videoFrame.setPixmap(pixmap)
else:
height, width, channel = frame.shape
self.videoFrame.setPixmap(QPixmap.fromImage(QImage(frame.data, width, height, QImage.Format_RGB888)))
这是每秒钟的处理时间:
0.8245744705200195
0.004508256912231445
0.0037131309509277344
0.0024259090423583984
0.002048969268798828
0.0022318363189697266
没那么高
我保存帧,帧大小为 640x480px,文件大小约为 480kB 我认为它关于文件大小是否有降低图像质量的选项?
【问题讨论】:
-
Ehm...
timeit.timeit()不返回当前时间,因此您没有测量经过的时间(实际上,它返回的是负值,这没有多大意义)。使用datetime.now或 QElapsedTimer 再试一次。 -
对不起,我随时间更改了它,结果没有太大变化。