我使用
将彩色 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)
...
你可以像这样制作 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