python - Qlabel 显示图像的文件大小太慢?
问题描述
我尝试在 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 我认为它与文件大小有关,有没有降低图像质量的选项?
解决方案
它大约是我设置的帧大小cv2.CAP_PROP_FRAME_WIDTH
和cv2.CAP_PROP_FRAME_HEIGHT
帧读取及其工作之前。
def record(self):
start = time.time()
self.parent.timerLabel.setTimerText()
self.vid.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
self.vid.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
ret, frame = self.vid.read()
new = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.parent.setImageToLabel(new)
end = time.time()
print(end - start)
之后我从 QPixmap 缩放并显示我的屏幕。
def setImageToLabel(self, frame):
if type(frame) == str:
pixmap = QPixmap(QImage(frame))
pixmap = pixmap.scaled(1000, 600)
self.videoFrame.setPixmap(pixmap)
else:
height, width, channel= frame.shape
pixmap = QPixmap(QImage(frame.data, width, height, QImage.Format_RGB888))
pixmap = pixmap.scaled(1000, 600)
self.videoFrame.setPixmap(pixmap)
推荐阅读
- c# - 如何获取 xml 文档的所有命名空间以进行正确的 XPath 评估?
- flutter - 如何在 ListView 中添加滚动指示器
- ios - 如何在 ios(Objective c) 中生成 Oauth 签名?
- java - 在 Date() sqlite android 中使用数据库列值时出现问题
- c# - 执行证书 http 客户端调用时出现问题:“请求已取消:无法创建安全的 TLS/SSL 通信”
- node.js - Heroku 找不到模块
- c - 在c中堆栈弹出程序,每次都返回错误的输出
- sql - 如何在 SQL 的嵌套连接中使用 GroupBy
- informatica - 如何在 Informatica 中生成动态目标文件
- ruby - 在浏览器中显示 ruby 程序