import sysfrom PyQt5 import QtCoreimport cv2from PyQt5 import QtGuifrom PyQt5.QtCore import QThreadfrom PyQt5.QtGui import QImagefrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QLabelfrom PyQt5.QtGui import QPixmapfrom PyQt5.QtWidgets import QPushButtondef getCameraNum(): """获取摄像头数量""" num = 0 for i in range(0,5) : # 从摄像头中取得视频 cap = cv2.VideoCapture(i) if cap.isOpened(): num+=1 cap.release() return numclass FrameThread(QThread): imgLab = None device = None paizhao = 0 """摄像头拍照线程,摄像头拍照耗时较长容易卡住UI""" def __init__(self,deviceIndex,imgLab): QThread.__init__(self) self.imgLab = imgLab self.deviceIndex = deviceIndex self.device = cv2.VideoCapture(self.deviceIndex) # 从摄像头中取得视频 self.device.set(cv2.CAP_PROP_FRAME_WIDTH, 1600) self.device.set(cv2.CAP_PROP_FRAME_HEIGHT, 1200) def run(self): if self.device.isOpened(): try: while True: ret, frame = self.device.read() height, width, bytesPerComponent = frame.shape bytesPerLine = bytesPerComponent * width # 变换彩色空间顺序 cv2.cvtColor(frame, cv2.COLOR_BGR2RGB, frame) # 转为QImage对象 image = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888) if self.paizhao == 1: image.save("C:\\img"+str(self.deviceIndex)+".jpg") self.paizhao = 0 pixmap = QPixmap.fromImage(image) pixmap = pixmap.scaled(400, 300, QtCore.Qt.KeepAspectRatio) self.imgLab.setPixmap(pixmap) finally: self.device.release() # if self.cap.isOpened(): # # 获取视频播放界面长宽 # width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5) # height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5) # # 定义编码器 创建 VideoWriter 对象 # while (self.cap.isOpened()): # # 读取帧摄像头 # ret, frame = self.cap.read() # image = QtGui.QImage(frame, width, height, QtGui.QImage.Format_Indexed8) # pixmap = QtGui.QPixmap.fromImage(image.mirrored(False, True)) # # pixmap = QPixmap('C:\left.jpg') # self.imgLab.setPixmap(pixmap) def destroyed(self, QObject=None): self.device.release()class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout(self) lb1 = QLabel(self) lb2 = QLabel(self) btn = QPushButton(self) btn.setText("拍照") btn.clicked.connect(self.paizhao) self.frameThread = FrameThread(0,lb1) self.frameThread.start() self.frameThread2 = FrameThread(1,lb2) self.frameThread2.start() hbox.addWidget(lb1) hbox.addWidget(lb2) hbox.addWidget(btn) self.setLayout(hbox) self.move(300, 300) self.setWindowTitle('像素图控件') self.show() def paizhao(self): self.frameThread.paizhao = 1 self.frameThread2.paizhao = 1 def showDate(self, date): self.lb1.setText(date.toString())if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())