快速节省图像到OpenCV中的磁盘

Fast saving of images to disk in openCV

本文关键字:磁盘 OpenCV 节省 图像      更新时间:2023-10-16

我正在使用basler摄像头,想写我以1000x1000px抓取的图像,以尽快磁盘。保持电影容器的打开并保存为.avi并没有真正的帮助(减慢2倍),保存单个图像甚至较慢。我目前正在使用OPENCV CVVIDEORECOREATOR和IMWRITE功能。我的计算机应该足够快(Intel Xeon 3.6 GHz,64GB RAM,SSD)。有什么想法吗?

您可能需要考虑多个因素(步骤),以达到目标(保存50 fps或150 mb/s)的颜色图像(1k x 1k x 3)。

  1. 图像编码:大多数众所周知的图像格式,例如PNG,TIF,JPG花费时间来编码图像(例如,PNG的5.7 ms,tif在OpenCV中使用3.6 GHz 4核CPU中的TIF tif为11.5 ms)在将编码格式数据保存到磁盘之前,要达到特定格式。

  2. 文件打开:独立于文件大小,这可能需要时间(例如,在3.5" WD黑色上1.5 ms)

  3. 文件写作:文件大小的依赖,这可能需要时间(例如,3.5" WD黑色)

  4. 在2.0 ms上
  5. 文件关闭:文件大小的依赖,这可能需要大量时间(例如,3.5" WD黑色)14.0 ms)

这意味着您必须在每个图像中以20毫秒的目标完成所有步骤,并且正如我给出了时机的示例,您可能无法使用JPG中的OpenCV Imwrite来实现您的目标,因为该库会顺序完成所有上面的步骤中的一个线程。

我认为您有几个选择

  1. imwrite在SSD上的BMP格式中,因为其编码时间实际上为零(例如,小于0.3 ms)

  2. 在单独的线程中执行上面的一些步骤(例如,编码或文件关闭)。

尤其是,文件关闭是在单独的线程中运行的一个很好的候选者,因为它可以与其他步骤进行异步进行。我能够使用第二个选项,BMP文件格式和更好的硬盘来达到400 MB/s的保存带宽。

希望这可以帮助您和其他具有类似目标的人。

您在问题中陈述的规格与您的处理和缓冲数据的能力有关,但与您可以转储到磁盘的速度无关。

您正在尝试编写(假定一些数字,只需替换自己)1000 * 1000(大小) * 4(数据/像素) * 25(帧速率)字节每秒。
(或100m/s)

这与传统的HDD的限制有关,但是如果磁盘分散或填充,则不太可能跟上。因此,您必须找到一种方法来加快写入时间(例如,切换到SSD);减少编写的数据(压缩,降低颜色深度/质量/帧速率)或缓冲您要编写的内容时,背景线程保存到磁盘时。

您必须问的问题是您打算录制多长时间。如果它不足以填充您的RAM,那么您可以使用所有可用的选项。但是,如果您打算延长时间记录,则必须选择其他2个。