如何获得图像的全像素';s RGB颜色与ImageMagick?

如何获得图像的全像素';s RGB颜色与ImageMagick?,imagemagick,Imagemagick,我是ImageMagick的新手 我想知道图像的RGB颜色的整个像素 我已经知道如何获得一个像素的RGB颜色 但我不知道如何用一个命令获得所有像素的数据 在每个像素上执行每个命令是如此繁重以至于无法使用它 最好的命令结果是这样的 #x,y={R,G,B} 1,1={100,230,105}, 1,2={100,230,105}, 1,3={100,230,135}, ... ... 进一步的选择 如果您想在大量图像中分摊运行identification的成本以获得更好的性能,您可以这样做-其中

我是ImageMagick的新手

我想知道图像的RGB颜色的整个像素

我已经知道如何获得一个像素的RGB颜色

但我不知道如何用一个命令获得所有像素的数据

在每个像素上执行每个命令是如此繁重以至于无法使用它

最好的命令结果是这样的

#x,y={R,G,B}
1,1={100,230,105},
1,2={100,230,105},
1,3={100,230,135},
...
...

进一步的选择

如果您想在大量图像中分摊运行
identification
的成本以获得更好的性能,您可以这样做-其中
%k
提供颜色数,
%n
提供文件名:

identify -format "%k:%f\n" *.jpg
输出

290972:7T6Dj.jpg
3641:a.jpg
8349:b.jpg
3019:back.jpg
3122:background.jpg
83155:blion.jpg
35136:brDaP.jpg
37106:cartesian.jpg
Java中必须有一个
system()
shell\u exec()
popen()
可以运行它,这样才能获得输出

更新的答案

如果您只是想检查图像是否只包含一种颜色,可以让ImageMagick计算颜色,如下所示(使用与下图相同的图像):

我不确定如何使用Java实现这一点,但在Ruby中可以做到:

image["%[k]"]
在Perl中,您可以:

my $image = Image::Magick->new;
$image->ReadImage("c.png");

print $image->Get("%[k]");
原始答案

您没有提供有关环境、编程语言、应用程序或任何内容的详细信息,但是,这可能会帮助您开始

让我们从命令行创建一个小图像,其中有3个正方形,每个4x4像素,一个红色、一个绿色和一个蓝色,都在一个水平行中:

convert -size 4x4 xc:red xc:green xc:blue +append a.gif
我将放大它,以便您可以看到它:

现在,我们可以查看文本格式:

convert -size 4x4 xc:red xc:green xc:blue +append -depth 8 txt:
# ImageMagick pixel enumeration: 12,4,255,srgb
0,0: (255,0,0)  #FF0000  red
1,0: (255,0,0)  #FF0000  red
2,0: (255,0,0)  #FF0000  red
3,0: (255,0,0)  #FF0000  red
4,0: (0,128,0)  #008000  green
5,0: (0,128,0)  #008000  green
6,0: (0,128,0)  #008000  green
7,0: (0,128,0)  #008000  green
8,0: (0,0,255)  #0000FF  blue
9,0: (0,0,255)  #0000FF  blue
10,0: (0,0,255)  #0000FF  blue
11,0: (0,0,255)  #0000FF  blue
0,1: (255,0,0)  #FF0000  red
1,1: (255,0,0)  #FF0000  red
2,1: (255,0,0)  #FF0000  red
3,1: (255,0,0)  #FF0000  red
4,1: (0,128,0)  #008000  green
5,1: (0,128,0)  #008000  green
6,1: (0,128,0)  #008000  green
7,1: (0,128,0)  #008000  green
8,1: (0,0,255)  #0000FF  blue
9,1: (0,0,255)  #0000FF  blue
10,1: (0,0,255)  #0000FF  blue
11,1: (0,0,255)  #0000FF  blue
0,2: (255,0,0)  #FF0000  red
1,2: (255,0,0)  #FF0000  red
2,2: (255,0,0)  #FF0000  red
3,2: (255,0,0)  #FF0000  red
4,2: (0,128,0)  #008000  green
5,2: (0,128,0)  #008000  green
6,2: (0,128,0)  #008000  green
7,2: (0,128,0)  #008000  green
8,2: (0,0,255)  #0000FF  blue
9,2: (0,0,255)  #0000FF  blue
10,2: (0,0,255)  #0000FF  blue
11,2: (0,0,255)  #0000FF  blue
0,3: (255,0,0)  #FF0000  red
1,3: (255,0,0)  #FF0000  red
2,3: (255,0,0)  #FF0000  red
3,3: (255,0,0)  #FF0000  red
4,3: (0,128,0)  #008000  green
5,3: (0,128,0)  #008000  green
6,3: (0,128,0)  #008000  green
7,3: (0,128,0)  #008000  green
8,3: (0,0,255)  #0000FF  blue
9,3: (0,0,255)  #0000FF  blue
10,3: (0,0,255)  #0000FF  blue
11,3: (0,0,255)  #0000FF  blue
但是您说获取一个1像素的时间太长,因此您可以将图像转换为纯RGB值的文件并读取:

convert -size 4x4 xc:red xc:green xc:blue +append -depth 8 x.rgb
如果我们看一下这个文件,我们可以看到它有144个像素长,16个红色像素,16个绿色像素,16个蓝色像素-因此总共48个像素-每个像素都有一个单独的字节R,G和B。(48x3=144)

ImageMagick使用文件扩展名确定格式,
rgb
表示
rgb
!。如果要使用与
.rgb
不同的扩展名,可以这样告诉ImageMagick:

convert -size 4x4 xc:red xc:green xc:blue +append -depth 8 RGB:x.raw
现在让我们看一下十六进制格式的文件:

xxd -g3 -c12 x.rgb
0000000: ff0000 ff0000 ff0000 ff0000  ............
000000c: 008000 008000 008000 008000  ............
0000018: 0000ff 0000ff 0000ff 0000ff  ............
0000024: ff0000 ff0000 ff0000 ff0000  ............
0000030: 008000 008000 008000 008000  ............
000003c: 0000ff 0000ff 0000ff 0000ff  ............
0000048: ff0000 ff0000 ff0000 ff0000  ............
0000054: 008000 008000 008000 008000  ............
0000060: 0000ff 0000ff 0000ff 0000ff  ............
000006c: ff0000 ff0000 ff0000 ff0000  ............
0000078: 008000 008000 008000 008000  ............
0000084: 0000ff 0000ff 0000ff 0000ff  ............
希望你能看到第一行是4个红色像素,第二行是4个绿色像素

因此,简而言之,如果您只想将图像中的纯二进制数据读取到C程序中,您可以这样做:

convert YourImage.jpg -depth 8 RGB:- | YourProgram

ImageMagick中有一个更新的选项,速度非常快。它类似于txt:但将数据列为逗号分隔的三元组(x、y、color,其中color是颜色名称或rgb(rr、gg、bb)。使用Mark的红、绿、蓝图像:

time convert WM9qM.gif sparse-color:

0,0,red 1,0,red 2,0,red 3,0,red 4,0,red 5,0,red 6,0,red 7,0,red 8,0,red 9,0,red 10,0,red 11,0,red 12,0,red 13,0,red 14,0,red 15,0,red 16,0,red 17,0,red 18,0,red 19,0,red 20,0,red 21,0,red 22,0,red 23,0,red 24,0,red 25,0,red 26,0,red 27,0,red 28,0,red 29,0,red 30,0,red 31,0,red 32,0,green 33,0,green 34,0,green 35,0,green 36,0,green 37,0,green 38,0,green 39,0,green 40,0,green 41,0,green 42,0,green 43,0,green 44,0,green 45,0,green 46,0,green 47,0,green 48,0,green 49,0,green 50,0,green 51,0,green 52,0,green 53,0,green 54,0,green 55,0,green 56,0,green 57,0,green 58,0,green 59,0,green 60,0,green 61,0,green 62,0,green 63,0,green 64,0,blue 65,0,blue 66,0,blue 67,0,blue 68,0,blue 69,0,blue 70,0,blue 71,0,blue 72,0,blue 73,0,blue 74,0,blue 75,0,blue 76,0,blue 77,0,blue 78,0,blue 79,0,blue 80,0,blue 81,0,blue 82,0,blue 83,0,blue 84,0,blue 85,0,blue 86,0,blue 87,0,blue 88,0,blue 89,0,blue 90,0,blue 91,0,blue 92,0,blue 93,0,blue 94,0,blue 95,0,blue 0,1,red 1,1,red 2,1,red 3,1,red 4,1,red 5,1,red 6,1,red 7,1,red 8,1,red 9,1,red 10,1,red 11,1,red 12,1,red 13,1,red 14,1,red 15,1,red 16,1,red 17,1,red 18,1,red 19,1,red 20,1,red 21,1,red 22,1,red 23,1,red 24,1,red 25,1,red 26,1,red 27,1,red 28,1,red 29,1,red 30,1,red 31,1,red 32,1,green 33,1,green 34,1,green 35,1,green 36,1,green 37,1,green 38,1,green 39,1,green 40,1,green 41,1,green 42,1,green 43,1,green 44,1,green 45,1,green 46,1,green 47,1,green 48,1,green 49,1,green 50,1,green 51,1,green 52,1,green 53,1,green 54,1,green 55,1,green 56,1,green 57,1,green 58,1,green 59,1,green 60,1,green 61,1,green 62,1,green 63,1,green 64,1,blue 65,1,blue 66,1,blue 67,1,blue 68,1,blue 69,1,blue 70,1,blue 71,1,blue 72,1,blue 73,1,blue 74,1,blue 75,1,blue 76,1,blue 77,1,blue 78,1,blue 79,1,blue 80,1,blue 81,1,blue 82,1,blue 83,1,blue 84,1,blue 85,1,blue 86,1,blue 87,1,blue 88,1,blue 89,1,blue 90,1,blue 91,1,blue 92,1,blue 93,1,blue 94,1,blue 95,1,blue 0,2,red 1,2,red 2,2,red 3,2,red 4,2,red 5,2,red 6,2,red 7,2,red 8,2,red 9,2,red 10,2,red 11,2,red ....

real    0m0.035s
user    0m0.024s
sys 0m0.007s
如果你想要每像素一行,你可以这样做

convert WM9qM.gif sparse-color: | tr " " "\n"

0,0,red
1,0,red
2,0,red
3,0,red
4,0,red
5,0,red
6,0,red
7,0,red
8,0,red
9,0,red
10,0,red
11,0,red
12,0,red
13,0,red
14,0,red
15,0,red
16,0,red
17,0,red
18,0,red
19,0,red
20,0,red
21,0,red
22,0,red
23,0,red
24,0,red
25,0,red
26,0,red
27,0,red
28,0,red
29,0,red
30,0,red
31,0,red
32,0,green

什么平台/操作系统?什么编程语言?或命令行?您总体上想做什么?linux/CentOS和JAVA。我将用JAVA调用execute命令行。我想确定一个图像仅由一种颜色组成。(单色图像)谢谢~这正是我想要的。====>convert YourImage.jpg-depth 8 txt:-但是!不幸的是它非常慢。哦,这很简单。等几分钟。我添加了一些选项-再看一看,告诉我进展如何。我的程序不能等这么久。进程至少需要结束15秒。所以我尝试使用JMagick、im4java来使用Im阿格马吉克。
time convert WM9qM.gif sparse-color:

0,0,red 1,0,red 2,0,red 3,0,red 4,0,red 5,0,red 6,0,red 7,0,red 8,0,red 9,0,red 10,0,red 11,0,red 12,0,red 13,0,red 14,0,red 15,0,red 16,0,red 17,0,red 18,0,red 19,0,red 20,0,red 21,0,red 22,0,red 23,0,red 24,0,red 25,0,red 26,0,red 27,0,red 28,0,red 29,0,red 30,0,red 31,0,red 32,0,green 33,0,green 34,0,green 35,0,green 36,0,green 37,0,green 38,0,green 39,0,green 40,0,green 41,0,green 42,0,green 43,0,green 44,0,green 45,0,green 46,0,green 47,0,green 48,0,green 49,0,green 50,0,green 51,0,green 52,0,green 53,0,green 54,0,green 55,0,green 56,0,green 57,0,green 58,0,green 59,0,green 60,0,green 61,0,green 62,0,green 63,0,green 64,0,blue 65,0,blue 66,0,blue 67,0,blue 68,0,blue 69,0,blue 70,0,blue 71,0,blue 72,0,blue 73,0,blue 74,0,blue 75,0,blue 76,0,blue 77,0,blue 78,0,blue 79,0,blue 80,0,blue 81,0,blue 82,0,blue 83,0,blue 84,0,blue 85,0,blue 86,0,blue 87,0,blue 88,0,blue 89,0,blue 90,0,blue 91,0,blue 92,0,blue 93,0,blue 94,0,blue 95,0,blue 0,1,red 1,1,red 2,1,red 3,1,red 4,1,red 5,1,red 6,1,red 7,1,red 8,1,red 9,1,red 10,1,red 11,1,red 12,1,red 13,1,red 14,1,red 15,1,red 16,1,red 17,1,red 18,1,red 19,1,red 20,1,red 21,1,red 22,1,red 23,1,red 24,1,red 25,1,red 26,1,red 27,1,red 28,1,red 29,1,red 30,1,red 31,1,red 32,1,green 33,1,green 34,1,green 35,1,green 36,1,green 37,1,green 38,1,green 39,1,green 40,1,green 41,1,green 42,1,green 43,1,green 44,1,green 45,1,green 46,1,green 47,1,green 48,1,green 49,1,green 50,1,green 51,1,green 52,1,green 53,1,green 54,1,green 55,1,green 56,1,green 57,1,green 58,1,green 59,1,green 60,1,green 61,1,green 62,1,green 63,1,green 64,1,blue 65,1,blue 66,1,blue 67,1,blue 68,1,blue 69,1,blue 70,1,blue 71,1,blue 72,1,blue 73,1,blue 74,1,blue 75,1,blue 76,1,blue 77,1,blue 78,1,blue 79,1,blue 80,1,blue 81,1,blue 82,1,blue 83,1,blue 84,1,blue 85,1,blue 86,1,blue 87,1,blue 88,1,blue 89,1,blue 90,1,blue 91,1,blue 92,1,blue 93,1,blue 94,1,blue 95,1,blue 0,2,red 1,2,red 2,2,red 3,2,red 4,2,red 5,2,red 6,2,red 7,2,red 8,2,red 9,2,red 10,2,red 11,2,red ....

real    0m0.035s
user    0m0.024s
sys 0m0.007s
convert WM9qM.gif sparse-color: | tr " " "\n"

0,0,red
1,0,red
2,0,red
3,0,red
4,0,red
5,0,red
6,0,red
7,0,red
8,0,red
9,0,red
10,0,red
11,0,red
12,0,red
13,0,red
14,0,red
15,0,red
16,0,red
17,0,red
18,0,red
19,0,red
20,0,red
21,0,red
22,0,red
23,0,red
24,0,red
25,0,red
26,0,red
27,0,red
28,0,red
29,0,red
30,0,red
31,0,red
32,0,green