我想知道如何使用OpenCV在Python 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
请参阅这些-
Smoothing,Mean,Thresholding
答案 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的多种图像类型。