从一系列图像中裁剪特定区域

从一系列图像中裁剪特定区域

我有一系列 png 图像(实际上它们是从 mp4 文件中获取的)。

我想从我拍摄的所有图像中裁剪相同的区域。

什么工具最适合这个,这样我可以先定义区域,然后将所有 png 图像裁剪到同一感兴趣的区域。

有什么可以批量压缩生成的图像(无损)吗?

我尝试了 apngasm,遗憾的是系列中要展示的细节被优化掉了——尽管据说 apngasm 是无损的!

由于所有生成的图像都非常相似:将它们压缩到最小尺寸的最佳方法是什么,以便可以轻松地将它们附加到电子邮件中,以便其他人可以逐步查看它们以讨论我想在其中展示的细节。

答案1

你可以使用convert来自包imagemagick

$ convert image_in.jpg -crop <widthxheight+left+top> image_out.jpg

然后,您可以将该命令包装在 for 循环中,并进行文件模式匹配等。

答案2

给出的答案的更完整版本:

使用 Gimp 的裁剪功能确定要保留的区域。选择从右下角到左上角的区域,使左上角点的坐标以及宽度和高度显示在 Gimp 的状态栏中。

在我的例子中,底部写着

316,88, ...px... 矩形 1622x634 ...

然后我编写了一个脚本并使其可执行:

#!/bin/bash

# Variablendefinition
inputdir="/home/a/tmp/png"     # ~ did not work here instead of /home/a
outputdir="/home/a/tmp/crop"

# Abarbeiten der eingelesenen Bilder mit Hilfe einer For-Schleife
# und dem Programm ImageMagick.

for pic in "$inputdir"/v*.png ; do 
    picname=$(basename "$pic")          # siehe Ausgaben in eine Variable schreiben
    echo "Bearbeite Bild:    $picname"
    convert "$pic" -crop 1622x634+316+88 "$outputdir/$picname"
done

并使用这个脚本执行了我的裁剪任务。

我仍在寻找一个良好压缩的答案,考虑到从一张图片到下一张图片只有很小的变化。

答案3

为了并行执行图像系列(我建议只在 SSD 驱动器上),请安装 imagemagick 和 parallel(sudo apt install imagemagick parallel),然后尝试以下操作:

mkdir out
parallel -j 4 convert {} -crop 2048x2048+0+0 out/{} ::: img-*.png

如果文件与掩码匹配,则使用 4 个过程-j 4将文件转换{}out/{}img-*.png

imagemagick 包中的 mogrify 也可以工作。

关于相似性和压缩,最有效的方法是使用未压缩的图像,并使用不压缩单个文件而是将所有内容一起压缩的方法对其进行压缩。p7zip 通常是最好的,而 tar+bzip2 有时/很少更好(通常用于文本和数据,如对比度非常低的图像)tar+xz 与 p7zip 非常相似(相同的压缩,不同的元数据)。但是对于大多数人来说,zip 是迄今为止最方便的格式。对于使用 Windows 7zip 的技术人员来说,我建议仅在收件人熟悉 Linux 的情况下使用 tar。

相关内容