pyqt5 rtsp摄像头
时间: 2023-10-09 09:14:14 浏览: 99
要在PyQt5中显示RTSP摄像头画面,你可以使用OpenCV库来获取摄像头视频流,然后使用PyQt5来显示视频流。
下面是一个简单的示例代码,可以帮助你开始:
```python
import cv2
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
class VideoThread(QThread):
change_pixmap_signal = pyqtSignal(QImage)
def __init__(self):
super().__init__()
def run(self):
# RTSP URL
url = "rtsp://xxx.xxx.xxx.xxx:554/xxx"
cap = cv2.VideoCapture(url)
while True:
ret, frame = cap.read()
if ret:
# Convert the frame to RGB format
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# Convert the frame to QImage
h, w, ch = rgb_frame.shape
qimg = QImage(rgb_frame.data, w, h, ch * w, QImage.Format_RGB888)
# Emit the signal to update the image
self.change_pixmap_signal.emit(qimg)
class App(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("RTSP Camera Viewer")
self.disply_width = 640
self.display_height = 480
# Create the QLabel to show the image
self.image_label = QLabel(self)
self.image_label.resize(self.disply_width, self.display_height)
# Create the layout for the widget
vbox = QVBoxLayout()
vbox.addWidget(self.image_label)
self.setLayout(vbox)
# Create the video thread and connect the signal to update the image
self.thread = VideoThread()
self.thread.change_pixmap_signal.connect(self.update_image)
self.thread.start()
def update_image(self, qimg):
# Resize the image to fit the QLabel
qimg = qimg.scaled(self.disply_width, self.display_height, Qt.KeepAspectRatio)
# Set the image to the QLabel
self.image_label.setPixmap(QPixmap.fromImage(qimg))
if __name__ == '__main__':
app = QApplication([])
window = App()
window.show()
app.exec_()
```
在上面的代码中,我们创建了一个名为`VideoThread`的QThread子类,用于获取RTSP视频流,并将其转换为QImage。我们还创建了一个名为`App`的QWidget子类,用于显示摄像头的实时视频流。在`App`类中,我们创建了一个QLabel来显示图像,并使用QVBoxLayout将其添加到窗口中。然后,我们创建了一个`VideoThread`实例,并将其连接到一个槽函数,该函数将接收新的QImage并更新QLabel的内容。最后,我们启动了Qt应用程序并显示窗口。
请注意,这只是一个简单的示例代码,并且可能需要进行一些修改才能适合你的特定需求。
阅读全文