【问题标题】:cv2.waitKey(0) not waiting when random key pressed - OpenCV 3.1.0, Python3, Ubuntu按下随机键时 cv2.waitKey(0) 不等待 - OpenCV 3.1.0、Python3、Ubuntu
【发布时间】:2017-03-09 12:02:56
【问题描述】:

所以我有一个程序,我将不同的按键分配给不同的功能。我正在使用 cv2.waitKey(0) 逐帧浏览。但是,当按下未分配功能的键时,仍会加载下一帧。如何防止未分配的按键加载循环中的下一帧?

谢谢!

while (cap.isOpened()):
frameclick = cv2.waitKey(0)
ret, frame = cap.read()
cv2.imshow('frame',frame)

if frameclick == ord('a'):
    swingTag()

elif frameclick == ord('r'):
    rewindFrames()

elif frameclick == ord('s'):
    stanceTag()

elif frameclick == ord('d'):
    unsureTag()

elif frameclick == ord('q'):
    with open((selectedvideostring + '.txt'), 'w') as textfile:
        for item in framevalues:
            textfile.write("{}\n".format(item))
    break

【问题讨论】:

  • 您的身份似乎不对。但更不应该在 imshow 之前等待吗?编辑:我希望else: continue 能够捕获所有其他点击并继续执行您的下一轮 while 循环。
  • 抱歉,在粘贴到 SO 时缩进丢失了 - 我不确定我理解你的意思 - waitKey(0) 在我的循环中的 imshow 之前?

标签: python c++ python-3.x opencv ubuntu


【解决方案1】:

问题在于你的逻辑。您的程序进入 while 循环并等待一个键。然后,如果按下一个键,则读取下一帧,但此时您的程序并不关心按下了哪个键。所以,你有你的下一帧,然后你检查哪个按钮被按下,这是迟到的。

【讨论】:

  • 为输入干杯,这有助于澄清一些事情
【解决方案2】:

正如@Ervin 的回答中提到的,尝试:

while (cap.isOpened()):
    ret, frame = cap.read()

    # check if read frame was successful
    if ret == False: break;

    # show frame first
    cv2.imshow('frame',frame)

    # then waitKey -- and make it <= 255
    frameclick = cv2.waitKey(0) & 0xFF

    if frameclick == ord('a'):
        swingTag()

    elif frameclick == ord('r'):
        rewindFrames()

    elif frameclick == ord('s'):
        stanceTag()

    elif frameclick == ord('d'):
        unsureTag()

    elif frameclick == ord('q'):
        with open((selectedvideostring + '.txt'), 'w') as textfile:
            for item in framevalues:
                textfile.write("{}\n".format(item))
        break

【讨论】:

  • 嘿,感谢您的回复 - 我尝试实现上述代码(将 'break' 放在 'if ret == False:' 之后的正确缩进下一行),我是仍然遇到同样的问题
  • 查看编辑以获取更多信息。此外,我确实经历过 Ubuntu 出于某种未知原因弄乱了键盘代码。将frameclick 打印到stdout 会更安全。
  • 为更多信息欢呼——即使有更新,我仍然遇到同样的问题——同时我正在使用 else: break to break if the wrong key is pressed,但我试图找到一种解决方法,其中另一个按键不读取并显示新框架
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2016-06-12
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多