elk*_*000 5 python image tensorflow
我有20,000张矩形图像,我想对它们进行中心裁剪,以便将它们插入机器学习算法中。
Tensorflow有tf.image.central_crop(),但是我想在TF介入之前检查图片。该函数采用张量并输出张量。
在Python中裁剪它们的最佳工具是什么?
编辑:或者,什么是计算中心作物的最佳算法?
您可以使用ImageMagick轻松快速地完成此操作,无需编写任何代码,ImageMagick安装在大多数 Linux 发行版上,可用于 macOS 和 Windows。
在终端中,通过设置gravitytocenter并指定与该位置的零偏移量,将图像裁剪为中央 50x50 像素,如下所示:
magick input.png -gravity center -crop 50x50+0+0 result.png
Run Code Online (Sandbox Code Playgroud)
如果你想裁剪到最大的正方形,你需要使用一个函数来找到高度和宽度中的较小者,并将其用于 50s 中的每一个:
magick input.png -gravity center -crop "%[fx:h<w?h:w]x%[fx:h<w?h:w]+0+0" result.png
Run Code Online (Sandbox Code Playgroud)
开始图片:
结果:
好的,现在我们想要做 20,000 张图像,所以我们使用GNU Parallel,那就是:
parallel magick {} -gravity center -crop ... {} ::: *.png
Run Code Online (Sandbox Code Playgroud)
但是现在我们遇到了一些新问题。列表中的文件将是太长ARG_MAX,所以我们需要在饲料中的文件名stdin从find这样用空终止:
find . -name \*.png -print0 | parallel -0 magick {} -gravity center -crop ... {}
Run Code Online (Sandbox Code Playgroud)
-crop表达式中的特殊字符也有一个新问题,因此我们需要请GNU Parallel为我们计算引用。所以最后的命令变成:
find . -name \*.png -print0 | parallel -0 --quote magick {} -gravity center -crop "%[fx:h<w?h:w]x%[fx:h<w?h:w]+0+0" {}
Run Code Online (Sandbox Code Playgroud)
这是一个非常强大的命令,可以快速更改数千张图像,覆盖原始图像,因此请先将它们复制到安全的地方,在一小部分图像上进行测试!
您可以通过以下方式获得进度条:
parallel --bar ...
Run Code Online (Sandbox Code Playgroud)
您可以进行“试运行”,要求GNU Parallel向您展示它会做什么,而无需实际执行以下操作:
parallel --dry-run ...
Run Code Online (Sandbox Code Playgroud)
有一些方法可以使这更快,更容易阅读 - 当我有更多时间时,我可能会添加它们。
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |