【发布时间】:2017-02-16 20:26:22
【问题描述】:
我使用 bash 脚本来处理延时电影的一堆图像。该方法称为快门拖动,我正在为所有图像创建移动平均值。以下脚本工作正常:
#! /bin/bash
totnum=10000
seqnum=40
skip=1
num=$(((totnum-seqnum)/1))
i=1
j=1
while [ $i -le $num ]; do
echo $i
i1=$i
i2=$((i+1))
i3=$((i+2))
i4=$((i+3))
i5=$((i+4))
...
i37=$((i+36))
i38=$((i+37))
i39=$((i+38))
i40=$((i+39))
convert $i1.jpg $i2.jpg $i3.jpg $i4.jpg $i5.jpg ... \
$i37.jpg $i38.jpg $i39.jpg $i40.jpg \
-evaluate-sequence mean ~/timelapse/Images/Shutterdrag/$j.jpg
i=$((i+$skip))
j=$((j+1))
done
但是,我注意到这个脚本需要很长时间来处理大量平均窗口较大的图像(每张图像 1 秒)。我想,这是由于在后台大量阅读和写作造成的。
可以提高这个脚本的速度吗?例如,将图像存储在内存中,每次迭代删除第一个图像,只加载最后一个图像。
我发现了imagemagick的mpr:{label}函数,但我想这不是正确的方法,因为在convert命令之后内存被清除了?
【问题讨论】:
-
当您似乎多次读取每个图像时,您应该考虑制作一个 RAMdisk(您使用什么操作系统?)并将所有 JPEG 转换为 RAMdisk 上的
MPC格式文件以最小化解码负载 - 也可以使用 GNU Parallel。 -
Ubuntu 15.10 是我正在使用的操作系统。有没有简单的方法来设置和使用 RAMdisk?
-
使用 OpenMP 支持重新编译 ImageMagick 将有助于提高
-evaluate-sequence的性能(如果尚未启用)。 -
我明天去看看 RAMdisk。不幸的是,编译不是我的选择。感谢您的帮助!
标签: bash image-processing imagemagick