Python 将Waitkey更改为";0“;使用qtwidts.QSlider没有效果
我的程序扫描给定视频中的圆圈。使用QSlider,我可以在程序运行时更改WaitKey的值。除了将滑块值更改为0外,每个数字都可以正常工作。视频不会等待任何按键(据我所知,WaitKey(0)表示等待任何按键)。程序的行为就像值仍然为1一样。该参数称为“globals.Speed” 正如政府所说: 注意:此函数是HighGUI中唯一可以获取和保存数据的方法 处理事件,因此需要为正常事件定期调用它 处理,除非在需要 关注事件处理 注意:该功能仅在至少有一个HighGUI窗口时有效 已创建,并且窗口处于活动状态。如果有几个高鬼 windows,其中任何一个都可以处于活动状态Python 将Waitkey更改为";0“;使用qtwidts.QSlider没有效果,python,opencv,pyqt5,Python,Opencv,Pyqt5,我的程序扫描给定视频中的圆圈。使用QSlider,我可以在程序运行时更改WaitKey的值。除了将滑块值更改为0外,每个数字都可以正常工作。视频不会等待任何按键(据我所知,WaitKey(0)表示等待任何按键)。程序的行为就像值仍然为1一样。该参数称为“globals.Speed” 正如政府所说: 注意:此函数是HighGUI中唯一可以获取和保存数据的方法 处理事件,因此需要为正常事件定期调用它 处理,除非在需要 关注事件处理 注意:该功能仅在至少有一个HighGUI窗口时有效 已创建,并且窗口
waitKey()
仅当OpenCV HighGUI窗口被激活时才起作用。如果您在界面上使用Qt GUI,您也应该在鼠标或键盘事件中使用Qt功能。如所述:
注意:此函数是HighGUI中唯一可以获取和保存数据的方法
处理事件,因此需要为正常事件定期调用它
处理,除非在需要
关注事件处理
注意:该功能仅在至少有一个HighGUI窗口时有效
已创建,并且窗口处于活动状态。如果有几个高鬼
windows,其中任何一个都可以处于活动状态
waitKey()
仅当OpenCV HighGUI窗口被激活时才起作用。如果您在界面上使用Qt GUI,您也应该在鼠标或键盘事件上使用Qt功能。HighGUI是cv2.VideoCapture()启动时弹出的界面吗?我在QLabel中显示视频帧,这意味着在我的例子中没有创建HighGUI?很抱歉,我的编程技能/知识还不太好,我不确定WaitKey(0)现在需要在代码中更改哪些内容才能正常工作。是的,正如您所说,您正在使用不属于opencv ui的qlabel。所以waitKey()永远不会起作用。为此,您应该使用qt特性,或者使用imshow()从opencv获取GHGUI是库模块。在waitKey之前,至少需要一个cv::imshow或cv::namedWindow来创建窗口,不要关闭它。当cv2.VideoCapture()启动时,HighGUI是弹出的界面吗?我在QLabel中显示视频帧,这意味着在我的例子中没有创建HighGUI?很抱歉,我的编程技能/知识还不太好,我不确定WaitKey(0)现在需要在代码中更改哪些内容才能正常工作。是的,正如您所说,您正在使用不属于opencv ui的qlabel。所以waitKey()永远不会起作用。为此,您应该使用qt特性,或者使用imshow()从opencv获取GHGUI是库模块。在waitKey之前,至少需要一个cv::imshow或cv::namedWindow来创建窗口,而不要关闭它。
# class that does the interface stuff
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.resize(1300, 800)
self.setWindowTitle("MainWindow")
self.initUI()
def initUI(self):
[...]
# QSlider to change WaitKey value
self.horizontalSliderSpeed = QtWidgets.QSlider(self)
self.horizontalSliderSpeed.setGeometry(QtCore.QRect(20, 300, 160, 22))
self.horizontalSliderSpeed.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSliderSpeed.setMinimum(0)
self.horizontalSliderSpeed.setMaximum(2000)
self.horizontalSliderSpeed.setValue(globals.Speed)
self.horizontalSliderSpeed.valueChanged.connect(lambda: self.changedValue(4))
self.horizontalSliderSpeedLabel = QtWidgets.QLabel(self)
self.horizontalSliderSpeedLabel.setFont(font)
self.horizontalSliderSpeedLabel.setText(f"Speed: {globals.Speed}")
self.horizontalSliderSpeedLabel.move(200, 300)
[...]
def changedValue(self, a):
[...]
if a == 4:
globals.Speed = self.horizontalSliderSpeed.value()
self.horizontalSliderSpeedLabel.setText(f"Speed: {globals.Speed}")
[...]
# class that processes the video
class Child_Clocked(QThread):
def run(self):
cap = cv2.VideoCapture(globals.VideoFile)
while globals.While_Run:
try:
cv2.waitKey(globals.Speed)
ret, frame = cap.read()
[...]