如何识别黑白图像?

hnn*_*nns 5 linux images ubuntu

我想知道是否有一种方法可以识别(并可能移动/删除)包含黑白和彩色图像的文件夹中的黑白照片?我正在使用 Ubuntu Linux。

Pau*_*aul 7

如果您安装 ImageMagick,您可以使用以下命令来测试某些内容是否为灰度:

$ convert bw.jpg -format "%[colorspace]" info:
Gray
Run Code Online (Sandbox Code Playgroud)

安装:

sudo apt-get install imagemagick
Run Code Online (Sandbox Code Playgroud)

所以要通过它们并移动:

for i in /images/folder ; do
  if [ "$(convert $i -format "%[colorspace]" info:)" == "Gray" ]; then
      mv "$i" /images/folder/bw
  fi
done
Run Code Online (Sandbox Code Playgroud)

但是,此方法仅测试图像使用的色彩空间。图像可能使用完整的 RGB 色彩空间,而实际上仅使用灰度色调(理想情况下,这些将转换为灰度以获得最佳效果)。

为了计算出仅使用灰色调,一种选择是将图像转换为 HSL 颜色,然后计算图像的平均饱和度。对于真正的灰度图像,平均饱和度将为零。对于 jpg 中的灰度图像,由于人工制品,您将与完美的灰度有些偏差,通常它们并不完美,具体取决于它们如何变成黑白。

这张图片例如:

黑白漫画

如果我们将其转换为 HSL 并获得平均饱和度:

$ convert black-and-white-comics.jpg -colorspace HSL -channel g \
>         -separate +channel -format "%[fx:mean]" info:
0.00781798
Run Code Online (Sandbox Code Playgroud)

图形输出范围为 0-1,因此您必须定义一个阈值,在该阈值下,您认为某些内容是灰度的,具体取决于您的源文件。