如何在c ++

时间:2018-10-31 12:59:42

标签: c++ opencv camera lossless-compression video-compression

我想用c ++记录相机中的帧。相机的帧频不是恒定的,我需要存储每个带有时间戳的图像(我使用OS时钟,并以毫秒为单位存储图像精度)。我已经将捕获的图像存储为图像文件序列,但是独立存储的图像(.png)太重了(因为我处理的序列很长,而且很多)。因此,我想利用连续图像之间的相似性(作为视频压缩技术),并创建一个利用这一事实的无损视频。然后,我想用这段视频提取单独保存时间戳的图像。

换句话说,我只使用视频格式来压缩图像序列(而不会丢失信息),但是我需要跟踪捕获图像时的确切时间戳。

所以我的问题是: 如何使用无损格式使用每帧的确切时间戳在视频中记录摄像机的流?

我一直在尝试使用OpenCV库,尤其是使用VideoWriter类。但是,VideoWriter界面不提供任何将帧和时间戳作为输入的方法。

我还有另一个选择,就是将每帧的时间戳和录制的视频一起存储在单独的txt文件中。然后,我可以使用时间戳从视频中检索帧。但是,我不确定是否要检索准确的帧,这没有任何信息插值。

预先感谢

1 个答案:

答案 0 :(得分:1)

格式必须是可移植的吗?

如果没有,这是一个主意:将一堆图片中的像素交织在一起(数字随时间而变化,具体取决于更改的大小)。

因此,文件中包含N张图片的块将包含:

N: the number of pictures in the chunk
timestamp 1: from picture 1
timestamp 2: from picture 2
...
timestamp N: from picture N
pixel 1: from picture 1, pixel 0,0
pixel 2: from picture 2, pixel 0,0
...
pixel N: from picture N, pixel 0,0
pixel N+1: from picture 1, pixel 0,1
pixel N+2: from picture 2, pixel 0,1
...
pixel N*X*Y: from picture N, pixel X-1,Y-1

然后使用无损压缩库压缩块(现在包含3D图像)并继续下一个块。

也许已经有具有类似功能的wavelet / fft库。