6

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

4

3 回答 3

9

你可以试试这个:

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))
于 2018-09-25T21:18:18.960 回答
7

你可以试试这个,考虑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

请参阅这些 -
平滑均值阈值

于 2018-09-25T20:47:36.083 回答
6

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

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

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

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

vips avg someImage.png

对于vips8 位图像,答案是 0..255。

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

于 2018-09-26T09:44:58.280 回答