pyside6接入摄像头
时间: 2025-01-23 11:10:47 浏览: 75
### 使用 PySide6 接入摄像头
为了实现通过 PySide6 访问摄像头的功能,可以利用 `QCamera` 和 `QCameraViewfinder` 类来完成基本的视频流显示功能。下面是一个简单的例子展示如何设置并运行一个基于 PySide6 的应用程序以访问默认摄像头设备。
```python
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QImage, QPixmap
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtMultimedia import QMediaCaptureSession, QVideoSink
from PySide6.QtMultimediaDevices import QCameraDevice
class CameraWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 Camera Access Example")
central_widget = QWidget()
layout = QVBoxLayout()
available_cameras = QCameraDevice.availableCameras()
if not available_cameras:
raise RuntimeError('No camera found')
media_capture_session = QMediaCaptureSession()
video_sink = QVideoSink()
video_label = QLabel("No frame yet.")
video_label.setAlignment(Qt.AlignCenter)
media_capture_session.setVideoOutput(video_sink)
media_capture_session.setCamera(available_cameras[0])
video_sink.videoFrameChanged.connect(self.update_video_frame)
layout.addWidget(video_label)
central_widget.setLayout(layout)
setCentralWidget(central_widget)
media_capture_session.start()
@staticmethod
def update_video_frame(frame):
image_format = QImage.Format_RGB888
img = QImage(
frame.bits(),
frame.width(),
frame.height(),
image_format,
)
pixmap = QPixmap.fromImage(img)
video_label.setPixmap(pixmap.scaled(
video_label.size(),
aspectRatioMode=Qt.KeepAspectRatio,
transformMode=Qt.SmoothTransformation))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = CameraWindow()
window.show()
sys.exit(app.exec())
```
上述代码创建了一个名为 `CameraWindow` 的窗口类,该类继承自 `QMainWindow`. 它初始化了用于捕获媒体会话的对象以及用于接收来自相机的数据帧对象,并设置了当新图像到达时更新标签上显示的内容的方法[^1].
阅读全文