我一直在用Python上在线课程,遇到了一些我无法解释的代码。我正在尝试计算图像的红色,绿色和蓝色通道的总和,这样做的代码行是:
img = plt.imread('480px-Astronaut-EVA.jpg')
intensity = img.sum(axis=2)
为什么使用axis=2
对所有三个通道的值求和?我正在使用matplotlib库。
答案 0 :(得分:1)
我找到了您正在谈论的原始代码。 我认为是:
import matplotlib.pyplot as plt
# Load the image into an array: img
img = plt.imread('myImage.jpg')
# Print the shape of the image
print(img.shape) # Outputs : (480, 480, 3)
然后,它计算第三个通道上的强度总和。
记住轴分别是:0、1和2。
# Compute the sum of the red, green and blue channels: intensity
intensity = img.sum(axis=2)
如果打印强度的形状:
# Print the shape of the intensity
print(intensity.shape) # Output : (480, 480)
这意味着对于每个位置(axe0_point,axe1_point),您将ax 2的值相加。
例如,如果img[50,50] == [10,10,10]
,您将拥有intensity[50,50] = 30
答案 1 :(得分:0)
对于RGB图像,返回值为MxNx3。
这表示图像以MxN像素阵列存储,每个像素具有3个元组(R,G,B值)。 img.sum(axis=2)
表示将每个像素的第三个轴(RGB值)相加,返回一个MxN强度值数组。
答案 2 :(得分:0)
axis = 2(第三轴)指示求和颜色分量的总和:
B = image[:,:,0]; G = image[:,:,1]; R = image[:,:,2]
答案 3 :(得分:0)
图像从文件读入numpy数组。通过阅读文章Numpy sum axis intuition(尤其是示例),您可以了解轴和数据操作的整个概念:
理解numpy sum的“轴”的方法是折叠指定的轴。因此,当它折叠轴0(行)时,它就变成一行和一列的和。
在2-d数组中,这可能会令人困惑,但是当我们谈论3-d,4-d,n-d时,这是定义轴的更直接的方法。