opencv / numpy如何获取每个像素的总和

opencv / numpy how to get the sum of each pixel

我有一个图像二维数组,每个像素都包含 rgb 值(我猜是 opencv 中的 bgr),我正在尝试获取一个新的二维数组,它具有每个像素的总和。

例如

起始图片:

形状:(1080,1920,3)

[[[255,255,255], [0,0,0]], [[0,120,255], [0,255,0]]]

结果:

形状:(1080,1920,1)

[[[765],[0]], [[375],[255]]]

我确定有一个我还不知道的简单 Numpy 解决方案...

如有任何帮助,我们将不胜感激!

mono = rgb.sum(axis=2)

生成一个形状 (1080,1920)。如果你真的需要它有三维空间,你可以使用reshape.

顺便说一下,如果你真的想制作单色,这不是做这件事的方法。有一个将 RGB 转换为单声道的公式,OpenCV 有工具可以做到这一点。

你确定这是一个二维数组吗?通常图像数组是 3-d,具有形状(高度,宽度,n_channels)。如果你有这样的数组,你可以在数组上使用 sum 方法,在通道轴上求和。

例如

In [1]: a = np.random.randint(0, 10, (2, 3, 4))

In [2]: a
Out[2]: 
array([[[5, 1, 7, 0],
        [7, 3, 1, 5],
        [5, 7, 0, 2]],

       [[5, 2, 0, 9],
        [4, 7, 4, 4],
        [0, 7, 1, 3]]])

In [3]: a.sum(axis=-1)
Out[3]: 
array([[13, 16, 14],
       [16, 19, 11]])