直接上代码
# @time: 2022/3/24 17:10
# @Author: wangshubo
# @File: main.py
# @description:
# @author_email: '971490321@qq.com'
import sys
import os
import cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QPalette, QBrush, QPixmap
class UiMainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(UiMainWindow, self).__init__(parent)
self.timerCamera = QtCore.QTimer() #初始化定时器
self.cap = cv2.VideoCapture() #初始化摄像头
self.camNum = r"D:/images/anquanmao.flv"
self.setUi()
self.slotInit()
self.flagWork = 0
self.x = 0
self.count = 0
def setUi(self):
self.layoutMain = QtWidgets.QHBoxLayout()
self.layoutFuncButton = QtWidgets.QHBoxLayout()
self.layoutDataShow = QtWidgets.QVBoxLayout()
self.btnOpenCam = QtWidgets.QPushButton("打开相机")
self.btnCloseCam = QtWidgets.QPushButton("退出")
#button颜色修改
btnColor = [self.btnOpenCam, self.btnCloseCam]
for i in range(2):
btnColor[i].setStyleSheet("QPushButton{color:black}" "QPushButton:hover{color:red}"
"QPushButton{background-color:rgb(78, 255, 255)}" "QPushButton{border:2px}"
"QPushButton{border_radius:10px}"
"QPushButton{padding: 2px 4px}")
self.btnOpenCam.setMinimumHeight(50)
self.btnCloseCam.setMinimumHeight(50)
self.move(500, 500)
#信息显示
self.labelCamera = QtWidgets.QLabel()
self.labelMove = QtWidgets.QLabel()
self.labelMove.setFixedSize(100, 100)
self.labelCamera.setFixedSize(641, 481)
self.labelCamera.setAutoFillBackground(False)
self.layoutFuncButton.addWidget(self.btnOpenCam)
self.layoutFuncButton.addWidget(self.btnCloseCam)
self.layoutFuncButton.addWidget(self.labelMove)
self.layoutMain.addLayout(self.layoutFuncButton)
self.layoutMain.addWidget(self.labelCamera)
self.setLayout(self.layoutMain)
self.labelMove.raise_()
self.setWindowTitle("摄像头")
def slotInit(self):
self.btnOpenCam.clicked.connect(self.opencamera)
self.timerCamera.timeout.connect(self.showcamera)
self.btnCloseCam.clicked.connect(self.close)
def opencamera(self):
if self.timerCamera.isActive() == False:
flag = self.cap.open(self.camNum) #打开摄像头操作
if flag == False:
msg = QtWidgets.QMessageBox.warning(self, 'warning', '请检测相机与电脑是否链接正确',
buttons=QtWidgets.QMessageBox.Ok,
defaultButton=QtWidgets.QMessageBox.Ok)
else:
self.timerCamera.start(30)
self.btnOpenCam.setText('关闭相机')
else:
self.timerCamera.stop()
self.cap.release()
self.labelCamera.clear()
self.btnOpenCam.setText('打开相机')
def showcamera(self):
flag, self.image = self.cap.read()
show = cv2.resize(self.image, (640, 480))
show = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
showImage = QtGui.QImage(show.data, show.shape[1], show.shape[0], QtGui.QImage.Format_RGB888)
self.labelCamera.setPixmap(QtGui.QPixmap.fromImage(showImage))
def closeEvent(self, e):
print("关闭")
ok = QtWidgets.QPushButton()
cancel = QtWidgets.QPushButton()
msg = QtWidgets.QMessageBox(QtWidgets.QMessageBox.warning, '关闭', '是否关闭!')
msg.addButton(ok, QtWidgets.QMessageBox.ActionRole)
msg.addButton(cancel, QtWidgets.QMessageBox.RejectRole)
ok.setText('确定')
cancel.setText('取消')
if msg.exec_() == QtWidgets.QMessageBox.RejectRole:
e.ignore()
else:
if self.cap.isOpened():
self.cap.release()
if self.timerCamera.isActive():
self.timerCamera.stop()
e.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = UiMainWindow()
win.show()
sys.exit(app.exec_())