使用pyuic5将ui文件转换为ui.py文件,内容如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'camerapage.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_CameraPage(object):
def setupUi(self, CameraPage):
CameraPage.setObjectName("CameraPage")
CameraPage.resize(855, 443)
self.layoutWidget = QtWidgets.QWidget(CameraPage)
self.layoutWidget.setGeometry(QtCore.QRect(30, 30, 757, 348))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(8, 8, 8, 8)
self.gridLayout.setObjectName("gridLayout")
self.rightButton = QtWidgets.QPushButton(self.layoutWidget)
self.rightButton.setMinimumSize(QtCore.QSize(80, 80))
self.rightButton.setMaximumSize(QtCore.QSize(80, 80))
font = QtGui.QFont()
font.setPointSize(14)
self.rightButton.setFont(font)
self.rightButton.setObjectName("rightButton")
self.gridLayout.addWidget(self.rightButton, 1, 2, 1, 1)
self.leftButton = QtWidgets.QPushButton(self.layoutWidget)
self.leftButton.setMinimumSize(QtCore.QSize(80, 80))
self.leftButton.setMaximumSize(QtCore.QSize(80, 80))
font = QtGui.QFont()
font.setPointSize(14)
self.leftButton.setFont(font)
self.leftButton.setObjectName("leftButton")
self.gridLayout.addWidget(self.leftButton, 1, 0, 1, 1)
self.returnButton = QtWidgets.QPushButton(self.layoutWidget)
font = QtGui.QFont()
font.setPointSize(14)
self.returnButton.setFont(font)
self.returnButton.setObjectName("returnButton")
self.gridLayout.addWidget(self.returnButton, 4, 0, 1, 3)
self.cameraButton = QtWidgets.QPushButton(self.layoutWidget)
font = QtGui.QFont()
font.setPointSize(14)
self.cameraButton.setFont(font)
self.cameraButton.setObjectName("cameraButton")
self.gridLayout.addWidget(self.cameraButton, 3, 0, 1, 3)
self.cameraLabel = QtWidgets.QLabel(self.layoutWidget)
self.cameraLabel.setMinimumSize(QtCore.QSize(480, 320))
font = QtGui.QFont()
font.setPointSize(14)
self.cameraLabel.setFont(font)
self.cameraLabel.setObjectName("cameraLabel")
self.gridLayout.addWidget(self.cameraLabel, 0, 3, 5, 1)
self.upButton = QtWidgets.QPushButton(self.layoutWidget)
self.upButton.setMinimumSize(QtCore.QSize(80, 80))
self.upButton.setMaximumSize(QtCore.QSize(80, 80))
font = QtGui.QFont()
font.setPointSize(14)
self.upButton.setFont(font)
self.upButton.setObjectName("upButton")
self.gridLayout.addWidget(self.upButton, 0, 1, 1, 1)
self.downButton = QtWidgets.QPushButton(self.layoutWidget)
self.downButton.setMinimumSize(QtCore.QSize(80, 80))
self.downButton.setMaximumSize(QtCore.QSize(80, 80))
font = QtGui.QFont()
font.setPointSize(14)
self.downButton.setFont(font)
self.downButton.setObjectName("downButton")
self.gridLayout.addWidget(self.downButton, 2, 1, 1, 1)
self.retranslateUi(CameraPage)
QtCore.QMetaObject.connectSlotsByName(CameraPage)
def retranslateUi(self, CameraPage):
_translate = QtCore.QCoreApplication.translate
CameraPage.setWindowTitle(_translate("CameraPage", "摄像头界面"))
self.rightButton.setText(_translate("CameraPage", "右"))
self.leftButton.setText(_translate("CameraPage", "左"))
self.returnButton.setText(_translate("CameraPage", "返回"))
self.cameraButton.setText(_translate("CameraPage", "打开摄像头"))
self.cameraLabel.setText(_translate("CameraPage", "摄像头画面"))
self.upButton.setText(_translate("CameraPage", "上"))
self.downButton.setText(_translate("CameraPage", "下"))
新建一个业务逻辑处理文件call_camerapage.py文件,在这个文件中我们可以实现业务逻辑,代码如下:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from ui import Ui_CameraPage
import numpy as np
import cv2
class CameraPageWindow(QWidget,Ui_CameraPage):
returnSignal = pyqtSignal()
def __init__(self,parent=None):
super(CameraPageWindow, self).__init__(parent)
self.timer_camera = QTimer() #初始化定时器
self.cap = cv2.VideoCapture() #初始化摄像头
self.CAM_NUM = 0
self.setupUi(self)
self.initUI()
self.slot_init()
def initUI(self):
self.setLayout(self.gridLayout)
def slot_init(self):
self.timer_camera.timeout.connect(self.show_camera)
#信号和槽连接
self.returnButton.clicked.connect(self.returnSignal)
self.cameraButton.clicked.connect(self.slotCameraButton)
def show_camera(self):
flag,self.image = self.cap.read()
show = cv2.resize(self.image,(480,320))
show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
showImage = QImage(show.data, show.shape[1],show.shape[0],QImage.Format_RGB888)
self.cameraLabel.setPixmap(QPixmap.fromImage(showImage))
#打开关闭摄像头控制
def slotCameraButton(self):
if self.timer_camera.isActive() == False:
#打开摄像头并显示图像信息
self.openCamera()
else:
#关闭摄像头并清空显示信息
self.closeCamera()
#打开摄像头
def openCamera(self):
flag = self.cap.open(self.CAM_NUM)
if flag == False:
msg = QMessageBox.Warning(self, u'Warning', u'请检测相机与电脑是否连接正确',
buttons=QMessageBox.Ok,
defaultButton=QMessageBox.Ok)
else:
self.timer_camera.start(30)
self.cameraButton.setText('关闭摄像头')
#关闭摄像头
def closeCamera(self):
self.timer_camera.stop()
self.cap.release()
self.cameraLabel.clear()
self.cameraButton.setText('打开摄像头')
核心代码:
class mwindow(QWidget, Ui_Dialog):
def __init__(self):
super(mwindow, self).__init__()
self.setupUi(self)
self.video_init()
def show_camera(self):
success, img = self.cam.read() # 从摄像头读取照片
img = cv2.flip(img, 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
qImg=qimage2ndarray.array2qimage(img)
pixmap = QPixmap.fromImage(qImg)
pixmap = pixmap.scaled(self.label_2.size(), Qt.KeepAspectRatio)
self.label_2.setPixmap(pixmap)
def video_init(self):
self.cam = cv2.VideoCapture(0) #初始化摄像头
self.timer_camera = QTimer() #初始化定时器
self.timer_camera.timeout.connect(self.show_camera)
self.timer_camera.start(30)
效果: