Я хотел бы знать, как написать функцию в Python 3 с помощью OpenCV, которая принимает изображение и порог и возвращает либо "темный", либо "светлый" после сильно размытия и снижения качества (быстрее, тем лучше). Это может показаться расплывчатым, но все, что только работает, сделает.
Вы можете попробовать следующее:
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))
Вы можете попробовать это, считая 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
Обратитесь к ним -
Сглаживание, среднее значение, пороговое значение
Лично я бы не стал писать ни один 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.
convert image.jpg -format "%[fx:int(mean*100)]" info:
ImageMagick, которая показывает среднюю интенсивность изображения в процентах.convert image.jpg -format "%[fx:int(mean*100)]" info: