如何使用imagemagick将单色jpeg图像转换为0和1的nxm数组?

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

我使用

将彩色 jpeg 图像转换为单色图像
convert image.jpg -monochrome monochrome.jpg

现在我想将 monochrome.jpg 转换为包含 nxm 数组的文本文件,其中 1 表示黑色像素,0 表示白色像素(反之亦然)。 Imagemagick 可以做到这一点吗?我尝试过类似的事情

convert monochrome_800x480.jpg -depth 1 -format 'txt' monochrome.txt

但是输出并不是我想象的那样由 1 和 0 组成的矩阵:

# ImageMagick pixel enumeration: 800,480,0,255,gray
0,0: (255)  #FFFFFF  gray(255)
1,0: (255)  #FFFFFF  gray(255)
2,0: (255)  #FFFFFF  gray(255)
3,0: (255)  #FFFFFF  gray(255)
4,0: (255)  #FFFFFF  gray(255)
5,0: (255)  #FFFFFF  gray(255)
6,0: (255)  #FFFFFF  gray(255)
7,0: (255)  #FFFFFF  gray(255)
8,0: (255)  #FFFFFF  gray(255)
...
imagemagick
1个回答
0
投票

你可以像这样制作 10x4 渐变:

magick -size 10x4 gradient: -monochrome a.png

我能得到你想要的最接近的是使用NetPBM纯(非二进制)PBM格式,如下所示:

magick a.png -compress none pbm:

结果

P1
10 4
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
1 1 1 1 1 1 1 1 1 1 
1 1 1 1 1 1 1 1 1 1 

当然,您可以删除或忽略带有签名和尺寸的前两行。您还可以在命令中添加

-negate
来反转亮度。

当图像的宽度导致输出超过 70 个字符时,您将遇到问题,因为标准要求行数永远不会超过该限制,因此每个图像行将获得多个输出行。这可能是也可能不是问题。


一种替代方案可能是

vips
,它可以编写不存在行长度问题的 CSV 格式。看起来像这样:

vips colourspace a.png a.csv b-w

结果

255     255     255     255     255     255     255     255     255     255
255     255     255     255     255     255     255     255     255     255
0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0
© www.soinside.com 2019 - 2024. All rights reserved.