Python Самый быстрый способ проверить, является ли изображение серым или цветным? - PullRequest
1 голос
/ 21 марта 2020

Я хочу проверить, является ли изображение серым или цветным, используя Python. Я знаю, что мы можем прочитать изображение и легко проверить, однако мне интересно, есть ли способ проверить без чтения полного изображения?

У меня есть около 200 миллионов изображений (200x200), поэтому чтение в каждом изображение не выполнимо с точки зрения времени выполнения.

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Хотя я не могу точно сказать, что это будет наиболее эффективным, я уверен, что он будет работать лучше, чем большинство операций.

Итак, рассмотрите возможность использования модуля 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]. Для изображения в градациях серого все элементы списка равны.

0 голосов
/ 21 марта 2020

Может быть, вы можете поставить какое-то условие, например размер , выполнить тест с двумя образцами:

Поддельный пример: - 'image_color.png' size = 4000 Bytes - 'image_grey.png 'size = 600 байт

Вы должны создать свою коллекцию имен изображений:

import os
if os.stat('image.png').st_size > 250:
  print('Is Color! :)')

Результат os параметр в байтах

Привет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...