PYQT6实时显示摄像头画面
时间: 2024-09-30 18:10:50 浏览: 43
PyQt5+OpenCV调用本地摄像头并在窗口实时显示图像
5星 · 资源好评率100%
在PyQt6中实现实时显示摄像头画面,你需要结合`PyQt6.QtMultimedia`和`PyQt6.QtGui`模块。以下是一个基本的步骤:
1. 导入所需模块:
```python
import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtMultimedia import QCamera, QCameraViewfinder
from PyQt6.QtGui import QImage
```
2. 初始化`QApplication`和摄像头:
```python
app = QApplication(sys.argv)
# 检查当前系统支持的摄像头设备
camera_ids = QCameraInfo.availableCameras()
if not camera_ids:
print("No camera detected.")
sys.exit()
# 选择第一个可用的摄像头
camera_info = camera_ids[0]
camera = QCamera(camera_info.id())
camera.setViewfinder(QCameraViewfinder())
```
3. 配置相机和视图器:
```python
camera.setViewfinderMode(QCamera.ViewfinderMode.StillImage)
camera.start()
# 创建一个图像槽来处理摄像头捕获的画面
def update_frame():
global img
frame = camera.frame()
if frame is None:
return
img = QImage(frame.buffer(), frame.width(), frame.height(),
QImage.Format_RGB888).rgbSwapped()
viewfinder.update(img)
viewfinder = camera.viewfinder()
viewfinder.signalFrameChanged.connect(update_frame)
```
4. 显示视频流:
```python
window = QWidget()
layout = QVBoxLayout(window)
label = QLabel(window)
label.setPixmap(QPixmap.fromImage(img)) # 初始加载一张静态图片,以便于布局
layout.addWidget(label)
window.resize(viewfinder.sizeHint()) # 设置窗口大小匹配视图器
window.show()
```
5. 运行应用:
```python
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个窗口,其中包含一个`QLabel`用于显示摄像头画面。`update_frame`函数会在摄像头捕获到新帧时被调用,更新显示的图像。
阅读全文