Image processing 使用Imagemagick仅显示所有非黑、非白像素
我有一张灰度图像,几乎完全是双色的,但不完全是双色的。我想看到所有的像素不是完全黑色或白色的 我怎样才能用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 思路是这样的: 将
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,谢谢你:-