使用多个核批量模糊图像

时间:2016-10-14 13:54:57

标签: r terminal parallel-processing imagemagick

我试图使用imagemagick模糊数千(> 50,000)图像的底部。图像分辨率为800x600。命令行代码(如下)有效,但需要很长时间。有没有什么方法可以并行运行,并希望使用system()从R内部调用?

我从互联网上获取此代码,因此我不确定它是否是实现此目标的最佳方式?任何帮助将不胜感激。提前谢谢!

(OS = OSX El Capitan)

cd /Users/Desktop/test_images
list=$(ls *.jpg)
for img in $list; do
    convert $img \
    \( -size 800x525 xc:black -size 800x75 xc:white -append \) \
    -compose blur -define compose:args=6 -composite \
    cd /Users/Desktop/test_images/results/$img
done
cd

1 个答案:

答案 0 :(得分:1)

我认为这个命令与你正在做的事情非常相似,但FAR更快。看看你是否喜欢这种效果:

convert start.jpg \( +clone -crop +0+525 -blur x4 \) -gravity south -composite result.jpg

enter image description here

如果可行,您可以像以前一样使用 GNU Parallel

parallel 'convert {} \( +clone -crop +0+525 -blur x4 \) -gravity south -composite results/{}' ::: *.jpg

您也可以将该批次放在名为BlurTitle的脚本中,如下所示:

#!/bin/bash
parallel 'convert {} \( +clone -crop +0+525 -blur x4 \) -gravity south -composite results/{}' ::: *.jpg

然后使用以下命令使其可执行:

chmod +x BlurTitle

并从R拨打:

system("./BlurTitle")

或来自终端:

./BlurTitle

如果你得到"参数列表太长",你可以通过在stdin而不是在命令之后发送参数来反过来表达它:

cd /path/to/images
find . -name \*.jpg -print0 | parallel -0 'convert {} \( +clone -crop +0+525 -blur x4 \) -gravity south -composite results/{}'