Answers:
如果安装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,因此您必须定义一个阈值,根据源文件,您可以根据该阈值将某些内容视为灰度。
for i in /images/folder
循环在Bash 4.3上对我不起作用。你的意思是for i in /images/folder/*
?
在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"