判断图像是亮的还是暗的

Find If Image Is Bright Or Dark

我想知道如何使用 OpenCV 在 Python 3 中编写函数,该函数接收图像和阈值以及 returns 'dark' 或 'light'在严重模糊它并降低质量之后(越快越好)。这听起来可能含糊不清,但只要行得通就行。

考虑到 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

参考这些-
Smoothing, Mean, Thresholding

你可以试试这个:

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))

就我个人而言,我不会为如此简单的操作而费心编写任何 Python,或加载 OpenCV。如果您绝对必须使用 Python,请忽略此答案并 select 另一个答案。

您可以在终端的命令行中使用 ImageMagick 来获取图像的平均亮度百分比,其中 100 表示 "fully white" 和 0 表示 "fully black",像这样:

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

或者,您可以使用 libvips,它不太常见,但速度非常快且非常轻巧:

vips avg someImage.png

对于 8 位图像,vips 答案的比例为 0..255。

请注意,这两种方法都适用于许多图像类型,从 PNG 到 GIF、JPEG 和 TIFF。