当前位置: 首页 > 知识库问答 >
问题:

OpenCV Python视频播放-如何为cv2设置正确的延迟。waitKey()

赵立果
2023-03-14

我使用以下代码捕获视频文件,翻转并保存它。

#To save a Video File

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.cv.CV_FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

此程序将输出保存为输出。阿维

现在,为了播放视频文件,我使用了以下程序

#Playing Video from File

import numpy as np
import cv2

cap = cv2.VideoCapture('output.avi')

print cap.get(5) #to display frame rate of video
#print cap.get(cv2.cv.CV_CAP_PROP_FPS)

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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #convert to grayscale

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'): 
        break

cap.release()
cv2.destroyAllWindows()

此程序播放视频文件输出。avi从第一个程序保存。问题是,这段视频看起来很快。因此,我尝试更改cv2的延迟值。waitKey()。当我放100的时候,视频看起来很好。我如何知道该将哪个值放在那里?它应该与帧速率相关吗?我检查了输出的帧速率。avi(见第二个程序中的第5行)和第20行。但是如果我用20作为cv2的延迟。waitKey()视频还是太快了。

任何帮助都将不胜感激。

共有3个答案

景子安
2023-03-14

imshow()之后放置waitKey(60),它将以正常速度显示。

仲孙焱
2023-03-14

不管怎样,我尝试了各种设置cv2.wait键()延迟时间的技巧,但都失败了。我发现工作是尝试这样的东西:key=cv2.waitKey(1)在你的同时(cap.is打开())像这样:

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.cv.CV_FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
  ret, frame = cap.read()
  if ret==True:
      key = cv2.waitKey(1)
      frame = cv2.flip(frame,0)

      # write the flipped frame
      out.write(frame)

      cv2.imshow('frame',frame)
      if key & 0xFF == ord('q'):
          break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

我希望这能帮助其他人。

濮阳宜
2023-03-14

从OpenCV文档中:

函数cv。waitKey([,delay])无限期地等待一个键事件(当延迟时

如果FPS等于20,那么在显示连续帧之间应该等待0.05秒。因此,只需将waitKey(50)放在imshow()之后,以获得所需的播放速度。

 类似资料:
  • 在网上研究了几天后,我来这里寻求帮助。我目前正在为朋友们开发一个简短的2D游戏(实际上只是为了好玩),几天前我了解了剪辑。在这个游戏中,玩家可以收集物体(几乎就像马里奥中的硬币一样)。我的问题是,我在收集硬币时会发出非常短的声音(50kB约1秒),如果玩家在1秒钟内收集3个硬币,那么剪辑会使游戏延迟。如果先例剪辑已经结束,那么就没有延迟。但是如果先例剪辑没有结束,那么尝试再次播放剪辑会使游戏延迟(

  • 问题内容: 我刚开始用Java编写代码,我正努力设置DelayQueue, 我想这样 我只是想学习所有的基础知识,并且从api上学到了内容,似乎无法掌握它。 提前致谢 问题答案: 该直到一定的延时已经过期保持要素内部。元素必须实现接口。 例如,我创建了一个扩展Delayed接口的类。这将实现compareTo和getDelay()方法 结果:

  • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。

  • 只是想知道是否有人能告诉我这是怎么回事。当我播放视频时,我可以听到音频,但视频不显示。这是我的代码,我是初学者

  • 我在codename one是新的,我在codename one的文档中找不到任何关于如何从codename one的URL播放视频的东西。

  • 通过该接口可以设置用户视频播放地址的有效时间 (需开通视频播放地址有效时长的设置权限), 地址为: http://spark.bokecc.com/api/authtimeout/update 需要传递以下参数: 参数 说明 userid 用户 id,不可为空 status 是否开启 自定义播放地址有效时长 0 关闭 (默认2小时,设置timeout值无效) ,1开启 (必须设置timeout值)