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 之间的值。
我有几张图片,我将它们转换为灰度并通过常规步骤对它们进行阈值处理:
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 之间的值。