ImageMagick - 获取单独数组中的所有颜色值

ImageMagick - get all color values in separate arrays

我需要获取单独数组中每个像素的所有 R、G、B 值。

这个命令:

convert image.png -depth 8 txt:

像这样输出多行:

277,533: (158,167,146)  #9EA792  srgb(158,167,146)

我可以将一行的值分开:

R_pixel=$(echo $test | cut -d "(" -f2 | cut -d "," -f1)
G_pixel=$(echo $test | cut -d "," -f3 | cut -d "," -f2)
B_pixel=$(echo $test | cut -d "," -f4 | cut -d ")" -f1)

R_pixel 我得到 158,但不是所有行。

但必须有更好的方法,可能直接来自 ImageMagick,对吧?

这没有得到正确的 R 值,因为我选择哪个频道并不重要:

R_pixel_array=( $( convert image.png -format "%[fx:r]" -compress none  PGM:-) )

最后,我需要一个 R_array,它只包含每个像素的 R 值。

你们很亲近。请您尝试以下操作:

R_pixel_array=( $(convert image.png -depth 8 -channel R -separate -compress none PGM:- | awk '!/^#/&&++c>=4') )
  • -channel R-separate 选项仅提取红色通道。
  • PGM: 前缀转换为灰度(每个像素一个通道)图像。
  • awk '!/^#/&&++c>=4' 命令跳过 header 行。

更新答案

由于您似乎想要一个有效的答案,请尝试以下操作。它的运行时间约为 awk 解决方案所需时间的 20%。前 4 个参数只是生成一个大的测试图像:

magick -size 4000x3000 xc:red -depth 8 -channel r -separate gray: | od -t u1 -An 

原答案

制作一个 4x3 的起始图像进行测试:

magick -size 4x3 gradient:red-blue start.png

放大

magick start.png -channel r -separate -crop 1x1 -format "%[fx:int(p{0,0}*255)]\n" info: 
255
255
255
255
127
127
127
127
0
0
0
0