Найти, если изображение яркое или темное

1

Я хотел бы знать, как написать функцию в Python 3 с помощью OpenCV, которая принимает изображение и порог и возвращает либо "темный", либо "светлый" после сильно размытия и снижения качества (быстрее, тем лучше). Это может показаться расплывчатым, но все, что только работает, сделает.

  • 0
    Что ты пробовал до сих пор?
  • 3
    Почему бы просто не ввести в терминал 1- convert image.jpg -format "%[fx:int(mean*100)]" info: ImageMagick, которая показывает среднюю интенсивность изображения в процентах. convert image.jpg -format "%[fx:int(mean*100)]" info:
Показать ещё 4 комментария
Теги:
opencv
image-processing
opencv-python

3 ответа

1
Лучший ответ

Вы можете попробовать следующее:

import imageio
import numpy

f = imageio.imread(filename, as_gray=True)

def img_estim(img, thrshld):
    is_light = np.mean(img) > thrshld
    return 'light' if is_light else 'dark'

print(img_estim(f, 127))
  • 0
    Отсутствует пустая выписка. отлично работает в любом случае. +1
  • 0
    Вы правы. Исправленный.
Показать ещё 1 комментарий
1

Вы можете попробовать это, считая image полутоновым изображением -

blur = cv2.blur(image, (5, 5))  # With kernel size depending upon image size
if cv2.mean(blur) > 127:  # The range for a pixel value in grayscale is (0-255), 127 lies midway
    return 'light' # (127 - 255) denotes light image
else:
    return 'dark' # (0 - 127) denotes dark image

Обратитесь к ним -
Сглаживание, среднее значение, пороговое значение

  • 0
    Среднее значение до и после размытия должно быть одинаковым (если используется правильное граничное условие).
  • 1
    Важно отметить, что 127 - это половина 255, и все. Пожалуйста, прокомментируйте свой код.
Показать ещё 1 комментарий
0

Лично я бы не стал писать ни один Python или загружать OpenCV для такой простой операции. Если вам абсолютно необходимо использовать Python, просто не обращайте внимания на этот ответ и выберите другой.

Вы можете просто использовать ImageMagick в командной строке вашего терминала, чтобы получить среднюю яркость изображения в процентах, где 100 означает "полностью белый", а 0 означает "полностью черный", например:

convert someImage.jpg -format "%[fx:int(mean*100)]" info:

Кроме того, вы можете использовать libvips который является менее распространенным, но очень быстрым и очень легким:

vips avg someImage.png

Ответ vips находится в масштабе 0..255 для 8-битных изображений.

Обратите внимание, что оба этих метода будут работать для многих типов изображений: от PNG, до GIF, JPEG и TIFF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню