加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 读取图像序列的最快方法是什么?

发布时间:2020-12-16 09:44:59 所属栏目:百科 来源:网络整理
导读:我有一个速度关键程序,它将重复从磁盘读取图像并从中计算值.图像太多,无法存储在内存中. 将读取相同的图像集,我们不会更改/编辑它们,并且它们的顺序是固定的. 并非所有图像都具有相同的大小,但是当编码为PNG时它们都具有大约1 Mb.它们有成千上万,大部分RAM已
我有一个速度关键程序,它将重复从磁盘读取图像并从中计算值.图像太多,无法存储在内存中.

将读取相同的图像集,我们不会更改/编辑它们,并且它们的顺序是固定的.

并非所有图像都具有相同的大小,但是当编码为PNG时它们都具有大约1 Mb.它们有成千上万,大部分RAM已经用于存储计算值.

Other than buying faster disks,or using RAID,what is the fastest way to read a sequence of images ?

将它们全部放在一个大的tar文件中(并使用自定义的解码代码读取它们)而不是文件夹中的单个文件会更快吗?

我找不到PNG解码的多线程实现,所以这个阶段也可能成为瓶颈.使用WebP而不是PNG会提供额外的速度优势吗?

我应该考虑/评估哪些其他想法?

解决方法

PNG不是为了速度而建.它比jpeg慢,并且不小于tif.如果你坚持使用PNG,那么其他任何优化都不会产生任何影响.

例如:

$time vips avg wtc.tif
117.853995
real    0m0.525s
user    0m0.756s
sys 0m0.580s
$time vips avg wtc.png
117.853995
real    0m3.622s
user    0m3.984s
sys 0m0.584s

其中“wtc”是10,000 x 10,000像素RGB照片,tif是未压缩的条带格式,png也是未压缩的,两个图像都在光盘缓存中,“avg”找到并打印平均像素值.

vips有自己的“.v”格式,这只是一个巨大的像素缓冲区.这种格式可以与mmap()并行读取,并且再次快一点:

$time vips avg wtc.v
117.853995
real    0m0.162s
user    0m0.460s
sys 0m0.092s

如果你的图像可以被压缩,那么权衡会有所改变.例如,jpeg通常压缩10倍,因此解码速度变得比光盘速度重要得多.您希望使用像libturbojpeg这样的优化解码库并一次处理多个文件.

$time vips avg wtc.jpg
117.853995 
real    0m1.413s
user    0m1.696s
sys 0m0.564s

PNG使用libz,对于摄影图像,压缩不会超过2倍.即使在相同的压缩级别,它也比使用deflate的tif慢得多:

$time vips avg wtc.tif
117.853995
real    0m3.154s
user    0m3.496s
sys 0m0.540s
$time vips avg wtc.png
117.853995
real    0m4.888s
user    0m5.196s
sys 0m0.556s
$ls -l wtc.*
-rw-r--r-- 1 john john  15150881 Feb 20  2012 wtc.jpg
-rw-rw-r-- 1 john john 135803013 May 18 12:47 wtc.png
-rw-rw-r-- 1 john john 143807446 May 18 12:53 wtc.tif
-rw-rw-r-- 1 john john 263509369 May 18 12:37 wtc.v

我想另一个因素是你的处理是多么耗时.如果你正在做一些密集的事情,读取速度和解码速度将不重要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读