AI文库-您身边的智能助手,如没有想要的内容请与本站万能的AI助手联系。

python语言写的udp服务端视频流如何实现在pyqt5中Ui界面的打开与关闭视频流,要求当打开视频流的时候,就显示图像,当关闭时就用黑色的画布遮住

来自 河南省郑州市 的网友 时间: 热度:20°C 加入收藏 我要投稿 点赞(3)
要在PyQt5中实现UDP服务端视频流的打开与关闭,可以使用以下步骤:

1. 首先,需要安装PyQt5和OpenCV库。可以使用以下命令安装:

```bash
pip install PyQt5 opencv-python
```

2. 创建一个名为`udp_video_stream.py`的文件,然后编写以下代码:

```python
import sys
import cv2
import numpy as np
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer, QThread, pyqtSignal, Qt

class UdpVideoStreamThread(QThread):
change_pixmap_signal = pyqtSignal(np.ndarray)

def __init__(self, ip, port):
super().__init__()
self.ip = ip
self.port = port
self.running = True

def run(self):
cap = cv2.VideoCapture(f'udp://{self.ip}:{self.port}')
while self.running:
ret, frame = cap.read()
if ret:
self.change_pixmap_signal.emit(frame)

def stop(self):
self.running = False
self.wait()

class MainWindow(QMainWindow):
def __init__(self, ip, port):
super().__init__()

self.setWindowTitle("UDP Video Stream")
self.setGeometry(100, 100, 800, 600)

layout = QVBoxLayout()

self.label = QLabel(self)
layout.addWidget(self.label)

self.start_button = QPushButton("开始", self)
self.start_button.clicked.connect(self.start_video_stream)
layout.addWidget(self.start_button)

self.stop_button = QPushButton("停止", self)
self.stop_button.clicked.connect(self.stop_video_stream)
layout.addWidget(self.stop_button)

container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)

self.udp_video_stream_thread = UdpVideoStreamThread(ip, port)
self.udp_video_stream_thread.change_pixmap_signal.connect(self.update_image)

def start_video_stream(self):
self.udp_video_stream_thread.start()

def stop_video_stream(self):
self.udp_video_stream_thread.stop()

def update_image(self, cv_img):
qt_img = self.convert_cv_qt(cv_img)
self.label.setPixmap(qt_img)

def convert_cv_qt(self, cv_img):
rgb_image = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
h, w, ch = rgb_image.shape
bytes_per_line = ch * w
convert_to_Qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
p = convert_to_Qt_format.scaled(800, 600, Qt.KeepAspectRatio)
return QPixmap.fromImage(p)

if __name__ == "__main__":
app = QApplication(sys.argv)
ip = "127.0.0.1"
port = 5000
mainWin = MainWindow(ip, port)
mainWin.show()
sys.exit(app.exec_())
```

3. 运行`udp_video_stream.py`文件,将会看到一个包含视频流的窗口。点击“开始”按钮以开始接收视频流,点击“停止”按钮以停止接收视频流。当视频流关闭时,窗口将显示一个黑色的画布。
221381
领取福利

微信扫码领取福利

微信扫码分享

直接下载
单次下载
0.5元/次
支付宝支付
2.免费下载(每天3次)
公众号:控分学霸复制
复制微信公众,搜索即可关注!
扫一扫关注公众号
欢迎使用微信支付
扫一扫支付
金额:
常见问题

请登录之后再下载!

下载中心

您的账号注册成功!密码为:123456,当前为默认信息,请及时修改

下载文件立即修改

帮助中心

如何获取自己的订单号?

打开微信,找到微信支付,找到自己的订单,就能看到自己的交易订单号了。

阅读并接受《用户协议》
注:各登录账户无关联!请仅用一种方式登录。


用户注册协议

一、 本网站运用开源的网站程序平台,通过国际互联网络等手段为会员或游客提供程序代码或者文章信息等服务。本网站有权在必要时修改服务条款,服务条款一旦发生变动,将会在重要页面上提示修改内容或通过其他形式告知会员。如果会员不同意所改动的内容,可以主动取消获得的网络服务。如果会员继续享用网络服务,则视为接受服务条款的变动。网站保留随时修改或中断服务而不需知照会员的权利。本站行使修改或中断服务的权利,不需对会员或第三方负责。

关闭