2024-09-30 10:37:42 发布
网友
我做了一个opencv项目,处理来自视频的输入流并显示处理后的输出。我用PyQt按钮从一个输出切换到另一个输出。我的PyQt窗口几乎覆盖了整个屏幕,当我单击按钮时,opencv窗口仍然位于PyQt窗口的后面。另外,我将PyQt的主窗口作为父窗口。如何将opencv窗口置于PyQt窗口之上。我搜索了cvGetWindowHandle(),但没有找到它在python中的实现。在
我使用了PyQt4和opencv2,PyQt窗口没有使用QtDesigner设计。在
您可以始终将OpenCV窗口包装在Qt小部件中。。。在
OpenCV
Qt
class QtCapture(QtGui.QWidget): def __init__(self, *args): super(QtGui.QWidget, self).__init__() self.fps = 24 self.cap = cv2.VideoCapture(*args) self.video_frame = QtGui.QLabel() lay = QtGui.QVBoxLayout() lay.setMargin(0) lay.addWidget(self.video_frame) self.setLayout(lay) def setFPS(self, fps): self.fps = fps def nextFrameSlot(self): ret, frame = self.cap.read() # OpenCV yields frames in BGR format frame = cv2.cvtColor(frame, cv2.cv.CV_BGR2RGB) img = QtGui.QImage(frame, frame.shape[1], frame.shape[0], QtGui.QImage.Format_RGB888) pix = QtGui.QPixmap.fromImage(img) self.video_frame.setPixmap(pix) def start(self): self.timer = QtCore.QTimer() self.timer.timeout.connect(self.nextFrameSlot) self.timer.start(1000./self.fps) def stop(self): self.timer.stop() def deleteLater(self): self.cap.release() super(QtGui.QWidget, self).deleteLater()
…你想怎么做都行:
您可以始终将
OpenCV
窗口包装在Qt
小部件中。。。在…你想怎么做都行:
^{pr2}$相关问题 更多 >
编程相关推荐