このケースでは、誤差許容のしきい値を 0.001 としている。0.01では誤判定が出るので。。
isgray.py
from PIL import Image, ,ImageStat
def is_grayscale(fn):
im = Image.open(fn).convert("RGB")
stat = ImageStat.Stat(im)
if abs(sum(stat.sum)/3 - stat.sum[0]) < (stat.sum[0] * 0.001) :
return True #yes, grayscale
else:
return False #no, colorimg
is_grayscale("hoge.jpg")