用magick(In r)处理多个图像,并带有转换

问题描述 投票:0回答:2

我需要自动化一些图像转换以执行以下操作: - 阅读16,000多个短而宽的图像,尺寸不一样。 - 将每个图像重新列为90像素 - 在图像宽度上裁剪90像素,因此在1张图像上进行了多个90x90庄稼 - 然后再一次进行下一个图像 - 每个90x90映像需要保存为file-name_1.png,file-name_2.png等,等等。 我已经完成了8张图像的测试,并使用Magick软件包可以重新恢复并从每个图像中创建多个农作物。问题是,当我尝试进行多次操作时,我可以轻松调整图像大小,但是在节省它们时,就会有问题。

# capture images, file paths in a list img_list <- list.files("./orig_images", pattern = "\\.png$", full.names = TRUE) # get all images in a list all_images <- lapply(img_list, image_read) # scale each image height - THIS DOESN'T WORK, GET NULL VALUE scale_images <- for (i in 1:length(all_images)) { scale_images(all_images[[i]], "x90") } # all images added into one all_images_joined <- image_join(all_images) # scale images - THIS WORKS to scale, but problems later all_images_scaled <- image_scale(all_images_joined, "x90") # Test whether a single file will be written or multiple files; # only writes one file (even if I for (i in 1:length(all_images_scaled)) { image_write(all_images_scaled[[i]], path = "filepath/new_cropimages/filename") }

理解,我会用for循环缩放图像。这样,我可以将缩放图像保存到目录。这无效 - 我没有错误,但是当我检查变量的内容时,它是无效的。 Image_join函数将它们全部放在一起,并将高度缩放到90(宽度也按比例缩放),但我无法将单独的图像写入目录。此外,下一件是在整个宽度上裁剪每个图像,并保存新图像file-name_1.png,依此类推,依此类推,依此类推,依此类推,依此类推,超过90个像素,裁剪90x90等。我之所以选择魔术是因为很容易单独扩展和作物,但是我愿意接受其他想法(或学习如何使该包装起作用)。感谢您的任何帮助。

这里有一些图像:

[Original Image, untransformed][1] [Manual 90x90 crop][2] [Another manual 90x90 crop, farther down the same image][3] [1]: https://i.sstatic.net/8ptXv.png [2]: https://i.sstatic.net/SF9pG.png [3]: https://i.sstatic.net/NyKxS.png

我不会说R,但我希望能够帮助成像方面并处理16,000张图像。

r image-processing magick
2个回答
2
投票
HomeBrew

轻松安装2个非常有用的软件包,使用:

brew install imagemagick brew install parallel ,您的原始句子图像是1850x105像素,您可以在这样的终端看到它:

magick identify sentence.png
sentence.png PNG 1850x105 1850x105+0+0 8-bit Gray 256c 51626B 0.000u 0:00.000

如果将高度调整到90px,而将宽度按比例遵循,则将变为1586x90px:

magick sentence.png -resize x90 info:
sentence.png PNG 1586x90 1586x90+0+0 8-bit Gray 51626B 0.060u 0:00.006

,如果您调整大小,然后裁剪成90px宽的块:

magick sentence.png -resize x90 -crop 90x chunk-%03d.png
您将获得18个块,每个块,除最后一个90个宽度外,如下所示:

-rw-r--r-- 1 mark staff 5648 6 Jun 08:07 chunk-000.png -rw-r--r-- 1 mark staff 5319 6 Jun 08:07 chunk-001.png -rw-r--r-- 1 mark staff 5870 6 Jun 08:07 chunk-002.png -rw-r--r-- 1 mark staff 6164 6 Jun 08:07 chunk-003.png -rw-r--r-- 1 mark staff 5001 6 Jun 08:07 chunk-004.png -rw-r--r-- 1 mark staff 6420 6 Jun 08:07 chunk-005.png -rw-r--r-- 1 mark staff 4726 6 Jun 08:07 chunk-006.png -rw-r--r-- 1 mark staff 5559 6 Jun 08:07 chunk-007.png -rw-r--r-- 1 mark staff 5053 6 Jun 08:07 chunk-008.png -rw-r--r-- 1 mark staff 4413 6 Jun 08:07 chunk-009.png -rw-r--r-- 1 mark staff 5960 6 Jun 08:07 chunk-010.png -rw-r--r-- 1 mark staff 5392 6 Jun 08:07 chunk-011.png -rw-r--r-- 1 mark staff 4280 6 Jun 08:07 chunk-012.png -rw-r--r-- 1 mark staff 5681 6 Jun 08:07 chunk-013.png -rw-r--r-- 1 mark staff 5395 6 Jun 08:07 chunk-014.png -rw-r--r-- 1 mark staff 5065 6 Jun 08:07 chunk-015.png -rw-r--r-- 1 mark staff 6322 6 Jun 08:07 chunk-016.png -rw-r--r-- 1 mark staff 4848 6 Jun 08:07 chunk-017.png


现在,如果您有16,000个句子要处理,则可以使用

GNUParallel
并行完成所有文件,并为所有文件获得明智的名称。让我们先做一个干式运行,这样它实际上什么也没做,而只是向您展示它会做什么:

parallel --dry-run magick {} -resize x90 -crop 90x {.}-%03d.png ::: sentence*

样本输出

magick sentence1.png -resize x90 -crop 90x sentence1-%03d.png 
magick sentence2.png -resize x90 -crop 90x sentence2-%03d.png
magick sentence3.png -resize x90 -crop 90x sentence3-%03d.png

看起来不错,因此请删除--dry-run

,然后再进行一次,您将获得我制作的句子的三个(相同副本)的以下输出:
-rw-r--r--  1 mark  staff  5648  6 Jun 08:13 sentence1-000.png
-rw-r--r--  1 mark  staff  5319  6 Jun 08:13 sentence1-001.png
-rw-r--r--  1 mark  staff  5870  6 Jun 08:13 sentence1-002.png
-rw-r--r--  1 mark  staff  6164  6 Jun 08:13 sentence1-003.png
-rw-r--r--  1 mark  staff  5001  6 Jun 08:13 sentence1-004.png
-rw-r--r--  1 mark  staff  6420  6 Jun 08:13 sentence1-005.png
-rw-r--r--  1 mark  staff  4726  6 Jun 08:13 sentence1-006.png
-rw-r--r--  1 mark  staff  5559  6 Jun 08:13 sentence1-007.png
-rw-r--r--  1 mark  staff  5053  6 Jun 08:13 sentence1-008.png
-rw-r--r--  1 mark  staff  4413  6 Jun 08:13 sentence1-009.png
-rw-r--r--  1 mark  staff  5960  6 Jun 08:13 sentence1-010.png
-rw-r--r--  1 mark  staff  5392  6 Jun 08:13 sentence1-011.png
-rw-r--r--  1 mark  staff  4280  6 Jun 08:13 sentence1-012.png
-rw-r--r--  1 mark  staff  5681  6 Jun 08:13 sentence1-013.png
-rw-r--r--  1 mark  staff  5395  6 Jun 08:13 sentence1-014.png
-rw-r--r--  1 mark  staff  5065  6 Jun 08:13 sentence1-015.png
-rw-r--r--  1 mark  staff  6322  6 Jun 08:13 sentence1-016.png
-rw-r--r--  1 mark  staff  4848  6 Jun 08:13 sentence1-017.png
-rw-r--r--  1 mark  staff  5648  6 Jun 08:13 sentence2-000.png
-rw-r--r--  1 mark  staff  5319  6 Jun 08:13 sentence2-001.png
-rw-r--r--  1 mark  staff  5870  6 Jun 08:13 sentence2-002.png
-rw-r--r--  1 mark  staff  6164  6 Jun 08:13 sentence2-003.png
-rw-r--r--  1 mark  staff  5001  6 Jun 08:13 sentence2-004.png
-rw-r--r--  1 mark  staff  6420  6 Jun 08:13 sentence2-005.png
-rw-r--r--  1 mark  staff  4726  6 Jun 08:13 sentence2-006.png
-rw-r--r--  1 mark  staff  5559  6 Jun 08:13 sentence2-007.png
-rw-r--r--  1 mark  staff  5053  6 Jun 08:13 sentence2-008.png
-rw-r--r--  1 mark  staff  4413  6 Jun 08:13 sentence2-009.png
-rw-r--r--  1 mark  staff  5960  6 Jun 08:13 sentence2-010.png
-rw-r--r--  1 mark  staff  5392  6 Jun 08:13 sentence2-011.png
-rw-r--r--  1 mark  staff  4280  6 Jun 08:13 sentence2-012.png
-rw-r--r--  1 mark  staff  5681  6 Jun 08:13 sentence2-013.png
-rw-r--r--  1 mark  staff  5395  6 Jun 08:13 sentence2-014.png
-rw-r--r--  1 mark  staff  5065  6 Jun 08:13 sentence2-015.png
-rw-r--r--  1 mark  staff  6322  6 Jun 08:13 sentence2-016.png
-rw-r--r--  1 mark  staff  4848  6 Jun 08:13 sentence2-017.png
-rw-r--r--  1 mark  staff  5648  6 Jun 08:13 sentence3-000.png
-rw-r--r--  1 mark  staff  5319  6 Jun 08:13 sentence3-001.png
-rw-r--r--  1 mark  staff  5870  6 Jun 08:13 sentence3-002.png
-rw-r--r--  1 mark  staff  6164  6 Jun 08:13 sentence3-003.png
-rw-r--r--  1 mark  staff  5001  6 Jun 08:13 sentence3-004.png
-rw-r--r--  1 mark  staff  6420  6 Jun 08:13 sentence3-005.png
-rw-r--r--  1 mark  staff  4726  6 Jun 08:13 sentence3-006.png
-rw-r--r--  1 mark  staff  5559  6 Jun 08:13 sentence3-007.png
-rw-r--r--  1 mark  staff  5053  6 Jun 08:13 sentence3-008.png
-rw-r--r--  1 mark  staff  4413  6 Jun 08:13 sentence3-009.png
-rw-r--r--  1 mark  staff  5960  6 Jun 08:13 sentence3-010.png
-rw-r--r--  1 mark  staff  5392  6 Jun 08:13 sentence3-011.png
-rw-r--r--  1 mark  staff  4280  6 Jun 08:13 sentence3-012.png
-rw-r--r--  1 mark  staff  5681  6 Jun 08:13 sentence3-013.png
-rw-r--r--  1 mark  staff  5395  6 Jun 08:13 sentence3-014.png
-rw-r--r--  1 mark  staff  5065  6 Jun 08:13 sentence3-015.png
-rw-r--r--  1 mark  staff  6322  6 Jun 08:13 sentence3-016.png
-rw-r--r--  1 mark  staff  4848  6 Jun 08:13 sentence3-017.png

关于参数的解释词:
parallel


{}

“当前文件”
  • {.}指“当前文件没有扩展名”
  • :::
    将适用于parallel的参数与用于您的
  • magick
  • 命令的参数分开
    
    
    
    一个警告的注意事项,png图像可以“记住”
    它们来的地方可能有用或非常烦人。如果您从上方看的最后一部分,您会发现它是56x90,但是随后,它是“记住”
    它来自canvas 1586x90,在Offset 1530,0:
identify sentence3-017.png sentence3-017.png PNG 56x90 1586x90+1530+0 8-bit Gray 256c 4848B 0.000u 0:00.000

有时会破坏随后的处理,这很烦人,或者有时在重新组装被切碎的图像中非常有用!如果要删除它,则需要重新计算,因此上面的命令变为: magick input.png -resize x90 -crop 90x +repage output.png

任期 - 更好地利用eBimage
中的工具 ImageMagick是一种很好的方法。但是,如果您想在图像上执行一些内容分析,则可以使用R. R提供一些方便的解决方案。另外,图像“无”只是矩阵,它的处理非常好。通过将图像减少为矩阵,包装

EBImage

做得很好,无论好坏,都可以用每个图像去除某些元数据。这是一个带有
EBImage
的R解决方案。同样,马克的解决方案可能会更好地进行大型生产。

2
投票
EBImage

管理颜色和灰度图像。

这里,通过添加所需背景颜色的像素,最终图像在扩展图像中被添加。然后将扩展图像裁剪成瓷砖。确定

pad

值的逻辑可以调整以简单地裁剪图像或左右辩护或正确地证明其合理性。
首先假设您从
./source
中的源文件和目标源的源文件开始工作目录开始。它还为每个“瓷砖”图像创建一个新目录。可以更改以使单个目录接收所有图像以及其他保护性编码。在这里,假定图像是具有适当扩展名的PNG文件。要应用于高度和宽度的所需瓷砖大小(90)存储在变量

./dest

中。

size

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.