【问题标题】:Python CV2 slow response time on keysPython CV2按键响应时间慢
【发布时间】:2019-02-07 10:14:19
【问题描述】:

我一直在编写一个视频播放器来测试我是否可以在 Python 中播放和暂停视频。我的问题是每当我按下一个键时,它的反应迟钝,需要连续按下才能起作用,而且效果是随机的。

如果有人知道是什么原因造成的,那将有很大帮助。

import cv2

cap = cv2.VideoCapture('testvideo.mp4')

length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

isPlaying = False


def onchange(trackbar_value):
    cap.set(cv2.CAP_PROP_POS_FRAMES, trackbar_value)
    err, vid = cap.read()
    cv2.imshow('player', vid)
    pass


start = 0

cv2.namedWindow('player')
cv2.createTrackbar('test', 'player', start, length, onchange)

onchange(1)

while cap.isOpened():
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    elif cv2.waitKey(1) & 0xFF == ord('p'):
        isPlaying = not isPlaying

    ret, player = cap.read()

    if cv2.waitKey(20) == 27:
        break
    if isPlaying:
        cv2.imshow('test', 'frame')

    elif cap.get(cv2.CAP_PROP_POS_FRAMES) >= length:
        break

cap.release()
cv2.destroyAllWindows()

【问题讨论】:

  • 不要在一个循环迭代中多次调用waitKey。现在,您不断丢弃与该特定测试不匹配的任何按键。例如如果第一个waitKey 得到q,它将丢弃它。新的下一个waitKey 很可能什么也得不到,除非用户设法在几毫秒内再次按下键。

标签: python-3.x opencv cv2


【解决方案1】:

我通过在 while cap.isOpened() 循环中更改这部分来修复它:

keyPress = cv2.waitKey(20)
ret, player = cap.read()
if keyPress & 0xFF == ord('q'):
    break
elif keyPress & 0xFF == ord('p'):
    isPlaying = not isPlaying

一旦我删除了

if cv2.waitKey(20) == 27:
    break

行,它也比以前好得多。

所有这些都加快了项目的速度,现在一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多