Image processing 用于从图像生成每个像素的R-G-B值的软件/工具,反之亦然

Image processing 用于从图像生成每个像素的R-G-B值的软件/工具,反之亦然,image-processing,Image Processing,是否有软件/工具可以从简单的原始8位RGB图像生成RGB值矩阵? 此外,是否有软件/工具可以从给定的RGB值矩阵生成图像 多谢各位 附言: i) 我知道这可以用Matlab实现。我正在寻找一个工具,可以做到这一点,不是Matlab ii)我意识到以编程方式进行类似工作存在的问题。我需要一个软件工具,如果有的话,可以完成这项任务。我建议您使用古老的NetPBM,它适用于Linux、macOS和Windows。或者,您可以使用ImageMagick,但重量要重得多,请参见下文 NetPBM方法-请

是否有软件/工具可以从简单的原始8位RGB图像生成RGB值矩阵? 此外,是否有软件/工具可以从给定的RGB值矩阵生成图像

多谢各位

附言:

i) 我知道这可以用Matlab实现。我正在寻找一个工具,可以做到这一点,不是Matlab


ii)我意识到以编程方式进行类似工作存在的问题。我需要一个软件工具,如果有的话,可以完成这项任务。

我建议您使用古老的NetPBM,它适用于Linux、macOS和Windows。或者,您可以使用ImageMagick,但重量要重得多,请参见下文


NetPBM方法-请参阅

因此,让我们从一个原始的8位RGB文件开始,该文件包含一个红色、绿色和蓝色像素:

-rw-r--r--  1 mark  staff  9 10 Oct 07:47 rgb888.bin
如您所见,它有9个字节。让我们来看看它们:

xxd -g3 rgb888.bin

00000000: ff0000 00ff00 0000ff 
现在,如果我们想让图像成为一个清晰的值矩阵:

rawtoppm -plain 3 1 rgb888.bin 
样本输出

P3
3 1
255
255 0 0  0 255 0  0 0 255
# ImageMagick pixel enumeration: 3,1,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (0,0,65535)  #0000FF  blue
P3
3 1
255
255 0 0 0 255 0 0 0 255 
255   0   0   0 255   0   0   0 255    
其中:

  • -普通
    表示以ASCII而不是二进制显示
  • P3告诉我们它是彩色和ASCII码
  • 31告诉我们它的尺寸是3像素宽1像素高
  • 255基本上告诉我们它是8位的(65536意味着16位)
  • 最后一行是像素
转换回二进制有点困难,让我们假设我们从如下创建的PPM文件开始:

rawtoppm -plain 3 1 rgb888.bin > image.ppm
ppmtoppm < image.ppm | tail -c 9 > rgb888.bin
因此,我们可以得到如下二进制版本:

rawtoppm -plain 3 1 rgb888.bin > image.ppm
ppmtoppm < image.ppm | tail -c 9 > rgb888.bin

ImageMagick方法

# Convert binary RGB888 to text
convert -depth 8 -size 3x1 RGB:rgb888.bin txt:
样本输出

P3
3 1
255
255 0 0  0 255 0  0 0 255
# ImageMagick pixel enumeration: 3,1,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (0,0,65535)  #0000FF  blue
P3
3 1
255
255 0 0 0 255 0 0 0 255 
255   0   0   0 255   0   0   0 255    
或者,外观稍有不同:

# Convert binary RGB888 to matrix
convert -depth 8 -size 3x1 RGB:rgb888.bin -compress none ppm:
样本输出

P3
3 1
255
255 0 0  0 255 0  0 0 255
# ImageMagick pixel enumeration: 3,1,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (0,0,65535)  #0000FF  blue
P3
3 1
255
255 0 0 0 255 0 0 0 255 
255   0   0   0 255   0   0   0 255    
现在换一种方式,从PPM到二进制

# Convert PPM image to binary
convert image.ppm rgb:image.bin

# Check how the binary looks
xxd -g 3 image.bin
00000000: ff0000 00ff00 0000ff                   .........

普通转储方法

# Convert binary RGB888 to text
convert -depth 8 -size 3x1 RGB:rgb888.bin txt:
也许您对从
od
直接转储感到满意:

od -An -t u1 rgb888.bin 
样本输出

P3
3 1
255
255 0 0  0 255 0  0 0 255
# ImageMagick pixel enumeration: 3,1,65535,srgb
0,0: (65535,0,0)  #FF0000  red
1,0: (0,65535,0)  #00FF00  lime
2,0: (0,0,65535)  #0000FF  blue
P3
3 1
255
255 0 0 0 255 0 0 0 255 
255   0   0   0 255   0   0   0 255    

matlab不是一个“软件工具”吗?我没有matlab的使用权。所以,寻找一个软件或网络应用程序可以完成这项任务。Python,Matplotlib和PIL(枕头)工作吗?谢谢马克!NetPBM正是我想要的。再次感谢。