如何识别黑白图像?


Answers:


7

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

$ convert bw.jpg -format "%[colorspace]" info:
Gray

安装:

sudo apt-get install imagemagick

所以要经历所有这些并移动:

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

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

为了解决只是使用灰色调,一个选项是将图像转换为HSL颜色,然后计算图像的平均饱和度。对于真正的灰度图像,平均饱和度将为零。使用jpg中的灰度图像,由于人工制品,您将从完美的灰度中获得一些偏差,并且通常它们并不完美,具体取决于它们如何以黑色和白色结束。

这个图像例如:

黑白漫画

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

$ convert black-and-white-comics.jpg -colorspace HSL -channel g \
>         -separate +channel -format "%[fx:mean]" info:
0.00781798

图形输出范围为0-1,因此您必须定义一个阈值,根据源文件,您可以根据该阈值将某些内容视为灰度。


'convert bw.jpg -format“%[colorspace]”info:'给出了很多错误的RGB结果。
hnns

@hnns你能在某个地方发表一个例子吗?
保罗


嗨@hnns,我更新了答案
保罗

如果你解释一下HSL命令的工作原理会很酷:我们当然可以查看手册页,但它会更快:-)此外,for i in /images/folder循环在Bash 4.3上对我不起作用。你的意思是for i in /images/folder/*
Ciro Santilli新疆改造中心996ICU六四事件2015年

1

在Windows 10下使用Image Magick 7.0.8安装,我在以下批处理脚本中使用HSL转换取得了很大成功。它捕获了大部分黑白图片,当然除了那些棕褐色的图片:

@echo off
setlocal ENABLEDELAYEDEXPANSION
if not exist bw md bw
for %%f in (*.jpg) do (
for /f %%i in ('magick "%%f" -colorspace HSL -channel g -separate +channel -format "%%[fx:mean]" info:') do set VAR=%%i
if !VAR! LEQ 0.05 move "%%f" .\bw)

如果你想删除而不是移动黑白图片,只需删除第3行并用move "%%f" .\bw最后一行替换命令del /Q "%%f"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.