【问题标题】:Python Fastest way to check if image is greyscale or color?Python 检查图像是灰度还是彩色的最快方法?
【发布时间】:2020-03-22 06:52:17
【问题描述】:

我想使用 Python 检查图像是灰度还是彩色。我知道我们可以读取图像并轻松检查,但是,我想知道是否有一种方法可以在不阅读完整图像的情况下进行检查?

我有大约 2 亿张图像 (200x200),因此在运行时读取每张图像是不可行的。

谢谢

【问题讨论】:

  • 迄今为止我发现的最快的:meta_data = magic.from_file(fname) dims = len(re.search('(\d+)x(\d+)', meta_data).groups() ) if dims == 2: print('greyscale')
  • 稍微快一点的是使用PIL和Image open然后检查尺寸
  • 有非常快速的方法。请指出图像的格式 - JPEG、TIFF、BMP?

标签: python rgb grayscale


【解决方案1】:

虽然我不能肯定这会是最有效的,但我确信它会比大多数操作执行得更好。

所以考虑使用 ImageStat 模块。

from PIL import Image, ImageStat

def is_grayscale(path="image.jpg")
    im = Image.open(path).convert("RGB")
    stat = ImageStat.Stat(im)
    if sum(stat.sum)/3 == stat.sum[0]: #check the avg with any element value
        return True #if grayscale
    else:
        return False #else its colour

stat.sum 为我们提供了列表视图中所有像素的总和 = [R, G, B] 例如 [568283302.0, 565746890.0, 559724236.0]。对于灰度图像,列表的所有元素都是相等的。

【讨论】:

  • 对不起,我知道如果图像是灰度的,图像将只有 1 个通道。例如,如果图像是灰度的,它会说是 200x200。如果是彩色的,它将是 200x200x3。你知道我可以在“不”加载图像的情况下破译尺寸的方法吗?加载是我试图避免的部分。
  • 又看了一遍,还没有找到更好的解决方案。在我看来,您在上面发布的那个似乎是一个很好的解决方案。如果您真的不想加载图像,那么您需要遵循其他答案并使用图像尺寸。当然,这也存在阈值问题。
  • 谢谢你。是的,这似乎是迄今为止我发现的最快的。出于好奇,如果我把东西移到 GPU 上,你知道加速是 2-5 倍还是更像 50 倍或 100 倍?我已经在上面的解决方案中使用了多个进程,所以我认为我已经在 CPU 前端最大化了东西
  • 另外,使用 Image.open 然后直接为我检查尺寸并确保它不是 3d 矩阵就足够了。这实际上比我上面给出的神奇解决方案要快一点
  • 这实际上是个好主意。据我了解,它最适合并行处理,例如机器学习、数据分析,核心强调图形。但是又有一些理论认为,使用 GPU 确实可以更快地完成某些工作。试试看没有错。
猜你喜欢
  • 2014-07-18
  • 2014-07-02
  • 2013-12-02
  • 2012-01-09
  • 1970-01-01
  • 2021-12-13
  • 2013-03-13
  • 2021-10-06
  • 2015-11-20
相关资源
最近更新 更多