我有一个在线绘制的黑白图,所以像素只有纯黑色或纯白色。这幅画是一个png,我正在python中分析它。
im = Image.open(os.path.join(dir))
im = img_as_float(im)
plt.imshow(im)
有人对如何计算png中黑色像素的数量有建议吗?
计算黑色像素的简单脚本:
def countBlack (image):
blacks = 0
for color in image.flatten():
if color < 0.0001:
blacks += 1
return blacks
假设所有像素都是黑色或白色,这应该有效:
len([px for px in list(im.getdata()) if px[1] < 0.01])
因为它现在是一个numpy数组,所以使用掩码和sum:
nblack = im[np.where(im==0)].sum()
print(nblack)
根据你的问题,这假设是实心黑色。任何其他阈值都是任意的。
如果您使用PIL打开图像,并期望得到纯的单通道灰度图像(而不是彩色图像或淡色调图像(,则应确保这就是您使用获得的图像
# Open image and ensure single channel greyscale image
im = Image.open(...).convert('L')
此处解释。
然后,您可以使用转换为Numpy数组
na = np.array(im)
现在,Numpy将为您计算白色像素:
white = np.count_nonzero(im)
黑色像素:
black = np.count_nonzero(im==0)
或者,您可以从像素总数中减去白色像素的数量:
black = im.size - white