查找图像是亮还是暗

时间:2018-09-25 20:05:16

标签: python opencv image-processing opencv-python

我想知道如何使用OpenCV在Python 3中编写函数,该函数接受图像和阈值,并在严重模糊并降低质量(更快越好)后返回“暗”或“亮”。这听起来可能有些含糊,但是任何可行的方法都可以。

3 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

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

答案 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'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

请参阅这些-
SmoothingMeanThresholding

答案 2 :(得分:1)

就我个人而言,我不会为这种简单的操作而编写任何 Python 或加载 OpenCV 。如果您绝对必须使用Python,请忽略此答案,然后选择其他答案。

您只需在终端的命令行中使用 ImageMagick 即可获取图像的平均亮度,以百分比表示,其中100表示​​“全白” , 0表示“全黑” ,如下所示:

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

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

vips avg someImage.png

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

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