Найти, если изображение яркое или темное - PullRequest
0 голосов
/ 25 сентября 2018

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

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы можете попробовать это:

import imageio
import numpy as np

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 голосов
/ 26 сентября 2018

Лично я бы не стал писать 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.

0 голосов
/ 25 сентября 2018

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

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

. См. Это -
Сглаживание , Среднее , Thresholding

...