新手练习,本人渣渣。
先用Qtdesigner做一个UI界面。


ui转为py。这句代码可以在终端直接转
pyuic5 -o four_camera_test.py four_camera_test.ui
生成的py程序如下:文件名为 four_camera_test.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'four_camera_test.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1241, 658)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setContentsMargins(1, -1, 3, 5)
self.horizontalLayout.setSpacing(32)
self.horizontalLayout.setObjectName("horizontalLayout")
self.btn_start = QtWidgets.QPushButton(self.centralwidget)
self.btn_start.setObjectName("btn_start")
self.horizontalLayout.addWidget(self.btn_start)
self.btn_stop = QtWidgets.QPushButton(self.centralwidget)
self.btn_stop.setObjectName("btn_stop")
self.horizontalLayout.addWidget(self.btn_stop)
self.btn_record = QtWidgets.QPushButton(self.centralwidget)
self.btn_record.setObjectName("btn_record")
self.horizontalLayout.addWidget(self.btn_record)
self.btn_quit = QtWidgets.QPushButton(self.centralwidget)
self.btn_quit.setObjectName("btn_quit")
self.horizontalLayout.addWidget(self.btn_quit)
self.splitter = QtWidgets.QSplitter(self.centralwidget)
self.splitter.setOrientation(QtCore.Qt.Horizontal)
self.splitter.setObjectName("splitter")
self.lab_1 = QtWidgets.QLabel(self.splitter)
self.lab_1.setObjectName("lab_1")
self.lineEdit_File = QtWidgets.QLineEdit(self.splitter)
self.lineEdit_File.setObjectName("lineEdit_File")
self.btn_file = QtWidgets.QPushButton(self.splitter)
self.btn_file.setObjectName("btn_file")
self.horizontalLayout.addWidget(self.splitter)
self.horizontalLayout.setStretch(4, 2)
self.gridLayout_2.addLayout(self.horizontalLayout, 0, 0, 1, 1)
self.splitter_2 = QtWidgets.QSplitter(self.centralwidget)
self.splitter_2.setOrientation(QtCore.Qt.Horizontal)
self.splitter_2.setObjectName("splitter_2")
self.lab_rador = QtWidgets.QLabel(self.splitter_2)
self.lab_rador.setMinimumSize(QtCore.QSize(600, 600))
self.lab_rador.setMaximumSize(QtCore.QSize(800, 800))
self.lab_rador.setObjectName("lab_rador")
self.widget = QtWidgets.QWidget(self.splitter_2)
self.widget.setObjectName("widget")
self.gridLayout = QtWidgets.QGridLayout(self.widget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.lab_camera2 = QtWidgets.QLabel(self.widget)
self.lab_camera2.setMaximumSize(QtCore.QSize(1000, 800))
self.lab_camera2.setObjectName("lab_camera2")
self.gridLayout.addWidget(self.lab_camera2, 0, 1, 1, 1)
self.lab_camera3 = QtWidgets.QLabel(self.widget)
self.lab_camera3.setMaximumSize(QtCore.QSize(1000, 800))
self.lab_camera3.setObjectName("lab_camera3")
self.gridLayout.addWidget(self.lab_camera3, 1, 0, 1, 1)
self.lab_camera1 = QtWidgets.QLabel(self.widget)
self.lab_camera1.setMaximumSize(QtCore.QSize(1000, 800))
self.lab_camera1.setObjectName("lab_camera1")
self.gridLayout.addWidget(self.lab_camera1, 0, 0, 1, 1)
self.lab_camera4 = QtWidgets.QLabel(self.widget)
self.lab_camera4.setMaximumSize(QtCore.QSize(1000, 800))
self.lab_camera4.setObjectName("lab_camera4")
self.gridLayout.addWidget(self.lab_camera4, 1, 1, 1, 1)
self.gridLayout_2.addWidget(self.splitter_2, 1, 0, 1, 1)
self.gridLayout_2.setRowMinimumHeight(1, 1)
self.gridLayout_2.setRowStretch(1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1241, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btn_start.setText(_translate("MainWindow", "开始"))
self.btn_stop.setText(_translate("MainWindow", "暂停"))
self.btn_record.setText(_translate("MainWindow", "保存"))
self.btn_quit.setText(_translate("MainWindow", "退出"))
self.lab_1.setText(_translate("MainWindow", " 保存位置"))
self.btn_file.setText(_translate("MainWindow", ".........."))
self.lab_rador.setText(_translate("MainWindow", "TextLabel"))
self.lab_camera2.setText(_translate("MainWindow", "TextLabel"))
self.lab_camera3.setText(_translate("MainWindow", "TextLabel"))
self.lab_camera1.setText(_translate("MainWindow", "TextLabel"))
self.lab_camera4.setText(_translate("MainWindow", "TextLabel"))
执行程序如下:
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QTimer,QCoreApplication
from PyQt5.QtMultimedia import QMediaContent,QMediaPlayer
from PyQt5.QtWidgets import QMainWindow,QFileDialog,QApplication
from four_camera_test import Ui_MainWindow
import cv2
import sys
import qimage2ndarray
import time
class FourCamera(QMainWindow,Ui_MainWindow):
def __init__(self):
super(FourCamera, self).__init__()
self.setupUi(self)
self.PreWidgets() #
self.PreParameters() # 准备参数
self.CallBackFunctions()
self.Timer = QTimer()
self.Timer.timeout.connect(self.TimerOutFun)
self.player = QMediaPlayer()
def PreWidgets(self):
self.PreCamera()
self.btn_stop.setEnabled(False)
self.btn_record.setEnabled(False)
def PreCamera(self):
self.camera1 = cv2.VideoCapture('rtmp://live.yihtc.com:10935/hls/stream_3')
self.camera2 = cv2.VideoCapture("rtmp://hls.hsrtv.cn/hls/hstv1")
self.camera3 = cv2.VideoCapture('https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8')
self.camera4 = cv2.VideoCapture("rtmp://livetv.dhtv.cn:1935/live/news")
def PreParameters(self):
self.RecordFlag = 0
self.RecordPatn = 'E:/'
self.lineEdit_File.setText(self.RecordPatn)
self.Image_num = 0
def CallBackFunctions(self):
self.btn_file.clicked.connect(self.SetFilePath) # 文件路径
self.btn_start.clicked.connect(self.StartCamera) # 开始
self.btn_stop.clicked.connect(self.StopCamera) # 暂停
self.btn_record.clicked.connect(self.RecordCamera) # 保存
self.btn_quit.clicked.connect(self.ExitApp) # 退出
def StartCamera(self):
self.btn_start.setEnabled(False)
self.btn_stop.setEnabled(True)
self.btn_record.setEnabled(True)
self.btn_record.setText('录像')
self.Timer.start(1)
self.timelb = time.clock()
def SetFilePath(self):
dirname = QFileDialog.getExistingDirectory(self,'浏览','.')
if dirname:
self.FilePathLE.setText(dirname)
self.RecordPatn = dirname + '/'
def TimerOutFun(self):
success1,img1 = self.camera1.read()
success2,img2 = self.camera2.read()
success3,img3 = self.camera3.read()
success4,img4 = self.camera4.read()
if success1 or success2 or success3 or success4:
self.Image1 = img1
self.Image2 = img2
self.Image3 = img3
self.Image4 = img4
self.DispImg()
self.Image_num += 1
if self.Image_num % 10 == 9 :
frame_rate = 10 / (time.clock() - self.timelb)
self.timelb = time.clock()
def DispImg(self):
img1 = cv2.cvtColor(self.Image1,cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(self.Image2,cv2.COLOR_BGR2RGB)
img3 = cv2.cvtColor(self.Image3,cv2.COLOR_BGR2RGB)
img4 = cv2.cvtColor(self.Image4,cv2.COLOR_BGR2RGB)
qimg1 = qimage2ndarray.array2qimage(img1)
qimg2 = qimage2ndarray.array2qimage(img2)
qimg3 = qimage2ndarray.array2qimage(img3)
qimg4 = qimage2ndarray.array2qimage(img4)
self.lab_camera1.setPixmap(QPixmap(qimg1))
self.lab_camera1.show()
self.lab_camera2.setPixmap(QPixmap(qimg2))
self.lab_camera2.show()
self.lab_camera3.setPixmap(QPixmap(qimg3))
self.lab_camera3.show()
self.lab_camera4.setPixmap(QPixmap(qimg4))
self.lab_camera4.show()
def StopCamera(self):
if self.btn_stop.text()=='暂停':
self.btn_stop.setText('继续')
self.btn_record.setText('保存')
self.Timer.stop()
elif self.btn_stop.text()=='继续':
self.btn_stop.setText('暂停')
self.btn_record.setText('录像')
self.Timer.start()
def RecordCamera(self):
tag = self.btn_record.text()
if tag == '保存':
image_name = self.RecordPatn + 'image' + time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'.jpg'
print(image_name)
cv2.imwrite(image_name,self.Image1)
elif tag == '录像':
self.btn_record.setText('停止')
self.btn_record.setText('停止')
video_name = self.RecordPath + 'video' + time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) + '.avi'
fps = self.lcd_zhen.value()
size = (self.Image.shape[1], self.Image.shape[0])
fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
self.video_writer = cv2.VideoWriter(video_name, fourcc, self.camera.get(5), size)
self.RecordFlag = 1
# self.MsgTE.setPlainText('Video recording...')
self.btn_stop.setEnabled(False)
self.btn_quit.setEnabled(False)
elif tag == '停止':
self.btn_record.setText('录像')
self.video_writer.release()
self.RecordFlag = 0
# self.MsgTE.setPlainText('Video saved.')
self.btn_stop.setEnabled(True)
self.btn_quit.setEnabled(True)
def ExitApp(self):
self.Timer.stop()
self.camera1.release()
QCoreApplication.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = FourCamera()
ui.show()
sys.exit(app.exec_())
运行结果如下:

本人新手,正在学习。后续会完善。

被折叠的 条评论
为什么被折叠?



