Python OpenCV,检查阈值化图像主要是白色还是黑色

Python OpenCV, check if thresholded image is mostly white or black

我有几张图片,我将它们转换为灰度并通过常规步骤对它们进行阈值处理:

image = cv2.imread('img_path')
image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
ret, frame_thresh = cv2.threshold(image_gray,128,255,cv2.THRESH_BINARY)

如何检查生成的图像大部分是黑色还是白色?我尝试使用直方图:

hist = cv2.calcHist([frame_thresh], [0], None, [2], [0, 1])
hist_ok /= hist_ok.sum()

但我在两张图片上进行了测试,其中一张是同类图片(一张主要是黑色,另一张主要是白色) 结果历史总是相同的

print(hist)
>> [[1.]
   [0.]]

经过阈值处理后,您的图像仅包含黑色 (0) 和白色 (255) 像素。您可以使用 countNonZero 函数计算非零像素(不是黑色)的数量并将其与图像大小进行比较。

或者,您可以只计算图像的平均值。如果它低于 127(范围的一半)图像大部分是黑色的。

您正在寻找图像的平均像素值,为此您可以使用 numpy:

import numpy as np
avg_color_per_row = np.average(frame_thresh, axis=0)
avg_color = np.average(avg_color_per_row, axis=0)

它输出一个介于 0 到 255 之间的值。