用于确定3维矩阵中一组索引的平均值的numpy功能

时间:2019-01-22 20:23:32

标签: python-3.x numpy matrix

我有一个图像的3D矩阵表示,所以是(600,800,3)矩阵。当前,我使用两个for循环遍历整个图像以访问每个像素值,以便计算每个索引的平均值(每个索引对应一个RGB值)。不过,这似乎非常乏味。有没有一种更快的方法使用numpy函数来计算所有这些值的均值? (我知道cv2以BGR上传图像,并将其转换为RGB)。下面是我用于计算R,G和B值均值的电流循环。

浏览numpy.mean文档,https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.mean.html 看起来您可以提供将2D矩阵作为平均值的轴,但是如何将其应用于3D矩阵呢?谢谢。

img_RGB = cv2.imread('../data/source1.png')

meanOfImageIndex0 = 0 
meanOfImageIndex1 = 0 
meanOfImageIndex2 = 0 

for i in range(0 to len(img_RGB)):
    for j in range(0 to len(img_RGB[0])):
        meanOfImageIndex0 += img_RGB[i][j][0]
        meanOfImageIndex1 += img_RGB[i][j][1] 
        meanOfImageIndex2 += img_RGB[i][j][2] 

meanOfImageIndex0 = meanOfImageIndex0 / (len(img_RGB) * (len(img_RGB[0]))
meanOfImageIndex1 = meanOfImageIndex1 / (len(img_RGB) * (len(img_RGB[0]))
meanOfImageIndex2 = meanOfImageIndex2 / (len(img_RGB) * (len(img_RGB[0]))

1 个答案:

答案 0 :(得分:1)

通读https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html之后 看来我可以使用

img_RGB = cv2.imread('../data/source1.png')

meanOfImageIndex0 = np.mean(img_RGB[:,:,0]) 
meanOfImageIndex1 = np.mean(img_RGB[:,:,1]) 
meanOfImageIndex2 = np.mean(img_RGB[:,:,2])

我认为我有点模糊numpy切片语法