Image processing 使用Imagemagick仅显示所有非黑、非白像素

Image processing 使用Imagemagick仅显示所有非黑、非白像素,image-processing,imagemagick,imagemagick-convert,Image Processing,Imagemagick,Imagemagick Convert,我有一张灰度图像,几乎完全是双色的,但不完全是双色的。我想看到所有的像素不是完全黑色或白色的 我怎样才能用Imagemagick做到这一点 [我想出了一种方法,我仍然会接受最好的其他方法!]我用 convert input.png -transparent black -transparent white \ -alpha extract -negate \ -colorspace rgb -fill red -opaque black \ output.png 思路是这样的: 将

我有一张灰度图像,几乎完全是双色的,但不完全是双色的。我想看到所有的像素不是完全黑色或白色的

我怎样才能用Imagemagick做到这一点

[我想出了一种方法,我仍然会接受最好的其他方法!]

我用

convert input.png -transparent black -transparent white \
  -alpha extract -negate \
  -colorspace rgb -fill red -opaque black \
  output.png
思路是这样的:

将所有黑色像素转换为透明黑色 白色同上-透明白色 现在我们有一个透明的图像,只有非透明的像素是非黑、非白的 将alpha通道复制到图像:-alpha提取。现在所有旧的BW像素都是黑色的,其他的都是白色的。 否定图像:-否定。现在所有旧的BW像素都是白色的,其他的都是黑色的。 如果你想要黑白图像,你可以停在这里。我想要红色的,所以:

更改为RGB颜色空间,因为我的图像为灰度:-颜色空间RGB 将填充颜色设置为红色:-填充红色 并将其应用于所有黑色像素,即非黑色或白色的像素:-不透明黑色 我和你一起解决了这个问题

convert input.png -transparent black -transparent white \
  -alpha extract -negate \
  -colorspace rgb -fill red -opaque black \
  output.png
思路是这样的:

将所有黑色像素转换为透明黑色 白色同上-透明白色 现在我们有一个透明的图像,只有非透明的像素是非黑、非白的 将alpha通道复制到图像:-alpha提取。现在所有旧的BW像素都是黑色的,其他的都是白色的。 否定图像:-否定。现在所有旧的BW像素都是白色的,其他的都是黑色的。 如果你想要黑白图像,你可以停在这里。我想要红色的,所以:

更改为RGB颜色空间,因为我的图像为灰度:-颜色空间RGB 将填充颜色设置为红色:-填充红色 并将其应用于所有黑色像素,即非黑色或白色的像素:-不透明黑色
如果以加号+而不是破折号-开头,ImageMagick或多或少有一个反向版本的-不透明。此命令将所有纯白色和纯黑色像素更改为白色,所有其他像素更改为红色

magick bw_img.png -colorspace rgb ^
  -fill white -opaque black -fill red +opaque white result.png
设置颜色空间后,第一个不透明操作将用白色填充每个纯黑色像素。当然,所有的白色像素都已经是白色了

然后将填充颜色更改为红色,+不透明操作将用红色填充非纯白色的每个像素

这是Windows语法。对于nix系统,应将连续的行插入符号^更改为反斜杠\或仅将命令转换为单行

对于ImageMagick v6,将magick更改为转换

编辑以添加

使用-transparent的解决方案是有效的,并且可能是某些工作流的最佳解决方案。请记住,有一个类似的选项,可以与-transparent操作符一起使用plus+。例如,这将创建输入图像的完全透明版本

magick logo: -background none -transparent red +transparent red result.png

首先,它将每个纯红色像素变为透明,然后将所有非纯红色像素变为透明。

如果以加号+而不是破折号-,ImageMagick或多或少会使用-不透明的反转版本。此命令将所有纯白色和纯黑色像素更改为白色,所有其他像素更改为红色

magick bw_img.png -colorspace rgb ^
  -fill white -opaque black -fill red +opaque white result.png
设置颜色空间后,第一个不透明操作将用白色填充每个纯黑色像素。当然,所有的白色像素都已经是白色了

然后将填充颜色更改为红色,+不透明操作将用红色填充非纯白色的每个像素

这是Windows语法。对于nix系统,应将连续的行插入符号^更改为反斜杠\或仅将命令转换为单行

对于ImageMagick v6,将magick更改为转换

编辑以添加

使用-transparent的解决方案是有效的,并且可能是某些工作流的最佳解决方案。请记住,有一个类似的选项,可以与-transparent操作符一起使用plus+。例如,这将创建输入图像的完全透明版本

magick logo: -background none -transparent red +transparent red result.png

首先,它将每个纯红色像素变为透明,然后将所有非纯红色像素变为透明。

这非常简单,但可能不是最快的

# Make any pixel that is pure black or white into white, else black
magick image.png -fx '(u==0)||(u==1)' result.png
或者,很明显,相反:

# Make any pixel that is neither pure black nor pure white into white, else black
magick image.png -fx '(u>0)&&(u<1)' result.png

这很简单——虽然可能不是最快的

# Make any pixel that is pure black or white into white, else black
magick image.png -fx '(u==0)||(u==1)' result.png
或者,很明显,相反:

# Make any pixel that is neither pure black nor pure white into white, else black
magick image.png -fx '(u>0)&&(u<1)' result.png

虽然这可能不是所写问题的标准解决方案,但它也是扩展类问题的解决方案:通过将1更改为其他值来查找不接近白色或黑色的像素。所以+1,谢谢:-虽然这可能不是本文所述问题的标准解决方案,但它也是一种扩展问题的解决方案:通过将1更改为其他值来查找不接近白色或黑色的像素。So+1,谢谢你:-