Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opencv VideoWriter录制的视频未以匀速播放_Opencv_Video_Record - Fatal编程技术网

opencv VideoWriter录制的视频未以匀速播放

opencv VideoWriter录制的视频未以匀速播放,opencv,video,record,Opencv,Video,Record,我使用opencv的videowriter来录制视频,但当我播放视频时,图片并非总是以恒定速度播放。有时会更快,但以后会变得正常。例如,如果视频中有人行走,此人有时会走得很快,但稍后会减速,然后再走得更快。但事实上,这个人正以恒定的速度行走。有人能告诉我怎么解决这个问题吗?欢迎提出任何意见。谢谢 这是我的记录代码: def image_callback(msg): self.image_queue.put(msg) fourcc = cv2.VideoWriter_fourcc(*

我使用opencv的videowriter来录制视频,但当我播放视频时,图片并非总是以恒定速度播放。有时会更快,但以后会变得正常。例如,如果视频中有人行走,此人有时会走得很快,但稍后会减速,然后再走得更快。但事实上,这个人正以恒定的速度行走。有人能告诉我怎么解决这个问题吗?欢迎提出任何意见。谢谢

这是我的记录代码:


def image_callback(msg):
    self.image_queue.put(msg)


fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter("test.avi",fourcc,30,(1280,720))
while (True):
    if(self.image_queue.qsize() > 0):
        out.write(self.image_queue.get())#self.image_queue is a queue which keep storing cv::mat data


想象一下,就像VideoWriter在每一帧之间放置一个恒定的延迟(在您的情况下为1000/30ms)。问题是图像回调不能以相等的时间间隔获得输入。解决方案如下所示:

  • 测量来自回调的两个图像之间经过的时间(让
    time\u passed
    以毫秒为单位为该变量)
  • 帧插入到VideoWriter中(时间经过/(1000/30.)
如果这看起来也不太好,比如人们在某个时刻暂停,您可以增加FPS以获得更平滑的结果。无论如何,这种方法在很大程度上依赖于运行时,在CPU过载时可能会得到不希望的结果,但是如果没有来自回调的图像的先验信息,我没有更好的方法