查找图像是亮还是暗

Far*_* R. 5 python opencv image-processing opencv-python

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

Spg*_*tCd 8

你可以试试这个:

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))
Run Code Online (Sandbox Code Playgroud)


par*_*gar 5

你可以试试这个,考虑到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
Run Code Online (Sandbox Code Playgroud)

参考这些 -
Smoothing , Mean , Thresholding

  • 重要的是要注意 127 是 255 的一半,以及一切。请注释您的代码。 (2认同)

Mar*_*ell 5

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

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

convert someImage.jpg -format "%[fx:int(mean*100)]" info:
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用libvips哪个不太常见,但非常快速且非常轻量级:

vips avg someImage.png
Run Code Online (Sandbox Code Playgroud)

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

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