我正在构建一个PyQt应用程序,该应用程序应该使用openCV 2显示传入的视频流。如何将正确的参数传递给QT连接插槽?
使用imshow-method允许流工作,但是现在我想在MainWindow的小部件中显示流。openCV功能在单独的线程上运行。
我找到了关于该问题的this question,但对于PyQt4。由于我使用的是PyQt5,因此需要进行一些更改。我发现an answer to another question与此有关,并且我试图修改我的代码以进行这些更改,但是由于出现错误提示
,因此我不确定我是否一切正确TypeError:setFrame()缺少1个必需的位置参数:“ frame”
class computerVisionThread(QtCore.QThread):
changePixmap = QtCore.pyqtSignal(QtGui.QImage)
def __init__(self, address):
super().__init__()
self.url = address
def run(self):
cap = cv2.VideoCapture("http://" + str(self.url) + ":8081")
while True:
ret, frame = cap.read()
if ret:
rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QtGui.QImage.Format_RGB888)
p = convertToQtFormat.scaled(640, 480, QtCore.Qt.KeepAspectRatio)
self.changePixmap.emit(p)
class Window(QtWidgets.QMainWindow):
def __init__(self):
#...
self.show()
@pyqtSlot(QtGui.QImage)
def setFrame(self, frame):
self.label.setPixmap(QtGui.QPixmap.fromImage(frame))
self.video = computerVisionThread(self.IPAddressLineEdit.text())
self.video.changePixmap.connect(setFrame)
self.video.start()