pyqt5调用摄像头QTimer()
时间: 2024-01-25 19:49:30 浏览: 22
可以使用PyQt5中的QCamera和QCameraViewfinder来调用摄像头,并使用QTimer来定时更新摄像头画面。
以下是一个使用QCamera和QCameraViewfinder的简单示例:
```python
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, QCameraViewfinder
from PyQt5.QtMultimedia import QCamera, QCameraInfo
class CameraWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 创建界面控件
self.camera_viewfinder = QCameraViewfinder(self)
self.btn_start = QPushButton('Start', self)
self.btn_stop = QPushButton('Stop', self)
self.label = QLabel(self)
# 创建布局
hbox = QHBoxLayout()
hbox.addWidget(self.btn_start)
hbox.addWidget(self.btn_stop)
vbox = QVBoxLayout()
vbox.addWidget(self.camera_viewfinder)
vbox.addLayout(hbox)
vbox.addWidget(self.label)
self.setLayout(vbox)
# 获取可用的摄像头
cameras = QCameraInfo.availableCameras()
if cameras:
self.camera = QCamera(cameras[0])
self.camera.setViewfinder(self.camera_viewfinder)
self.camera.start()
# 创建定时器
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_frame)
# 绑定按钮事件
self.btn_start.clicked.connect(self.start_camera)
self.btn_stop.clicked.connect(self.stop_camera)
def start_camera(self):
self.timer.start(1000 // 30) # 30 FPS
self.btn_start.setEnabled(False)
self.btn_stop.setEnabled(True)
def stop_camera(self):
self.timer.stop()
self.btn_start.setEnabled(True)
self.btn_stop.setEnabled(False)
def update_frame(self):
# 获取最新的摄像头画面
pixmap = self.camera_viewfinder.grab()
self.label.setPixmap(pixmap)
if __name__ == '__main__':
app = QApplication([])
widget = CameraWidget()
widget.show()
app.exec_()
```
在此示例中,我们创建了一个名为CameraWidget的QWidget子类,该类包含一个QCameraViewfinder用于显示摄像头画面,两个QPushButton用于启动和停止摄像头,以及一个QLabel用于显示当前帧。我们还使用QTimer定时更新摄像头画面。在start_camera和stop_camera方法中,我们启动和停止定时器,并启用或禁用按钮。在update_frame方法中,我们使用grab方法获取最新的摄像头画面,并将其设置为QLabel的Pixmap。