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
我需要获取单独数组中每个像素的所有 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