如何查找特定范围内的所有像素值

2024-04-29 02:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个rgb图像与许多颜色。我事先知道颜色(像素值)。我想在我的图像上找到某些颜色的数量。 我可以一次只做一种颜色,比如:

color1 = [63, 51, 30]
count1 = (np.count_nonzero(np.all(MyImage == color1, axis=2)

但是,如果我想找到许多不同的颜色,并且不使用这样的东西,我如何才能找到像素的总和:

color2 = [14, 24, 145]
count2 = (np.count_nonzero(np.all(MyImage == color2, axis=2)
color3 = [13, 190, 25]
count3 = (np.count_nonzero(np.all(MyImage == color3, axis=2)
color4 = [156, 31, 19]
count4 = (np.count_nonzero(np.all(MyImage == color4, axis=2)
sumofpixels = count1 + count2...+ countn

Tags: 图像颜色countnp像素allaxismyimage
1条回答
网友
1楼 · 发布于 2024-04-29 02:23:16

我想这就是你想要的

colors = np.array([
    [63, 51, 30],
    [14, 24, 145],
    [13, 190, 25],
    [156, 31, 19],
    ])

image = np.ones((100,100,3)) * colors[3] # create test image with colors[3]
image[0,0] = colors[0] # add 1 pixel with colors[0]
image[1,:] = colors[1] # 1 row with colors[1], i.e. 100 pixels
image[10:20] = colors[2] # 10 rows with colors[2], i.e. 1000 pixels
# 8899 pixels remaining with colors[3]

counts = np.all(image[None] == colors[:,None,None], axis=3).sum(axis=(1,2))
# array([   1,  100, 1000, 8899])

说明:None的创建新的轴以形成(1,100,100,3)(4,1,1,3),因此==将很容易播放。然后检查所有颜色通道(axis=3)的匹配位置,然后对图像维度(axis=(1,2))求和,最终得到每种颜色的总计数

相关问题 更多 >