使用 Python 调用摄像头需要使用OpenCV库。我们可以使用pip来安装它:
pip install opencv-python
使用 OpenCV 库打开摄像头并捕捉视频。下面是一个示例代码:
import cv2
# 打开与默认相机连接的视频流
cap = cv2.VideoCapture(0)
while True:
# 读取视频流的一帧
ret, frame = cap.read()
# 将一帧的像素值翻转,实现镜像效果
frame = cv2.flip(frame, 1)
# 展示当前帧
cv2.imshow('frame', frame)
# 每 1ms 检查键盘,如果按下 esc 键则退出循环
if cv2.waitKey(1) == 27:
break
# 释放摄像头
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
可以使用 pyqt5 创建 GUI 界面来呈现摄像头的视频。下面是一个示例代码:
import sys
import cv2
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
class VideoPlayer(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
# 创建标签来显示视频帧
self.label = QLabel()
# 设置标签的大小策略
self.label.setScaledContents(True)
# 创建一个垂直布局,加入标签
layout = QVBoxLayout()
layout.addWidget(self.label)
# 设置窗口的布局为垂直布局
self.setLayout(layout)
# 打开与默认相机连接的视频流
self.cap = cv2.VideoCapture(0)
# 创建计时器,在每个时间间隔更新视频帧
self.timer = QTimer()
self.timer.timeout.connect(self.update_frame)
# 开始计时器
self.timer.start(20)
def update_frame(self):
# 读取一帧的视频
ret, frame = self.cap.read()
# 将 BGR 格式视频帧转换为 RGB 格式
rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 将 RGB 图像转换为 QImage
h, w, ch = rgb_image.shape
bytes_per_line = ch * w
qt_image = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
# 将 QImage 转换为 QPixmap
pixmap = QPixmap.fromImage(qt_image)
# 在标签中显示 QPixmap
self.label.setPixmap(pixmap)
def keyPressEvent(self, event):
# 如果按下 ESC 键,关闭窗口并释放摄像头资源
if event.key() == Qt.Key_Escape:
self.cap.release()
self.timer.stop()
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
sys.exit(app.exec_())
以上两个代码示例可以帮助你了解 Python 通过 OpenCV 库打开摄像头实时捕捉视频,并使用 pyqt5 呈现视频的过程。可以根据实际需要灵活运用。