多个摄像头源不使用PyQt5线程:

问题描述 投票:-1回答:1

我有一个数据采集软件,需要来自两个不同摄像头源的摄像头,一个是Brio网络摄像头,另一个是通过USB网络共享连接的IP网络摄像头。现在,当我编辑流式传输两个多个视频的代码时,它只显示一个而不是另一个。代码如下:

import sys
import cv2
#from gsp import GstreamerPlayer
import datetime
from pyfirmata import util, Arduino
from PyQt5 import QtCore, QtGui
import openpyxl
from openpyxl import load_workbook
from PyQt5.QtCore import pyqtSlot, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QLayout, QDialog, QApplication, QMainWindow, QFileDialog, QPushButton, QWidget, QLabel
from PyQt5.uic import loadUi
import xlrd
from xlutils.copy import copy
import serial
import xlsxwriter
from xlwt import Workbook
sys.setrecursionlimit(15000)

# For the camera feed
class Thread(QThread):
    changePixmap = pyqtSignal(QImage)
    def run(self):
        cap = cv2.VideoCapture(0)
        while True:
            ret, frame = cap.read()
            if ret:
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                convertToQtFormat = QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
                p = convertToQtFormat.scaled(256, 181)
                self.changePixmap.emit(p)


class Thread1(QThread):
    changePixmap = pyqtSignal(QImage)

    def run(self):
        cap = cv2.VideoCapture('http://192.168.42.129:8080/video')
        while True:
            ret, frame = cap.read()
            if ret:
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                convertToQtFormat = QImage(
                    rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
                p1 = convertToQtFormat.scaled(111, 181)
                self.changePixmap.emit(p1)

主要的调用函数如下:

 @pyqtSlot(QImage)
 def setImage(self, image):
     self.webcam.setPixmap(QPixmap.fromImage(image))

 @pyqtSlot(QImage)
 def setImage1(self, image):
     self.webcam_2.setPixmap(QPixmap.fromImage(image))

 def initUI(self):
    th = Thread(self)
    th1 = Thread1(self)
    th1.changePixmap1.connect(self.setImage1)
    th.changePixmap.connect(self.setImage)
    th.start()

我是python编程的新手可以有人告诉我我在做错了吗?我尝试了另一种在函数和设置流中进行流式传输的方法,但这不是传统方法,因为我的应用程序由于while循环*(我猜)*而一直崩溃。如果我一次使用一个源它可以工作,但我似乎无法让它们一次工作。

python-3.x pyqt5 opencv3.0 qthread
1个回答
0
投票

因为我没有添加,我得到了解决方法

thread.start()

功能之前。

© www.soinside.com 2019 - 2024. All rights reserved.