python - np.mean() 的值错误?

标签 python image numpy mean

我对编程(Python)很陌生,所以我不明白这里发生了什么。我有一个图像 (35x64) 作为 3D 数组,并使用 np.mean(),我尝试提取一行的一个颜色 channel 的平均值:

print(np.mean(img[30][:][0]))

为了进行比较,我还编写了一个 for 循环来在列表中附加完全相同的值并用其计算平均值:

for i in range(64):
    img_list.append(img[30][i][0])
print(np.mean(img_list))

现在,由于一个奇怪的原因,它给出了不同的值:

First output: 117.1
Second output: 65.7

通过查看列表,我发现第二个是正确的。有更多经验的人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?我不想在程序中使用第二个更长的代码块,但正在寻找能够提供正确值的 1 行解决方案。

最佳答案

img[30][:][0]img[30,:,0] (您所期望的)之间存在细微差别。 让我们看一个例子:

img = np.arange(35*64*3).reshape(35,64,3)
img[30][:][0]
# array([5760, 5761, 5762])
img[30,:,0]
# array([5760, 5763, ... 5946, 5949])

所以你只需要:

print(np.mean(img[30,:,0]))

(无论如何,这更有效)。

一些细节:在原始语法中,[:] 实际上只是触发数组的副本:

xx = img[30]
yy = img[30][:]
print (xx is yy, xx.shape, yy.shape, np.all(xx==yy))
# False (64, 3) (64, 3) True # i.e. both array are equal 

因此,当您获取 img[30][:][0] 时,您实际上获得了第 30 行第一个像素的 3 种颜色。

关于python - np.mean() 的值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502791/

相关文章:

python - F 字符串,格式化帮助

python - 将 python ndarray 转换为 matlab 文件

python - 按索引选择不同形状的numpy数组并将其写回

html - 从图像生成 HTML map

python - 基于值是否在其他列表中的 Numpy 掩码

python - SQLAlchemy:查询期间失去与 MySQL 服务器的连接

python - 使用多线程 Raspberry pi B+ 运行多个脚本

python - 如何在 Django 子目录中安装 WordPress?

iPhone 应用程序在附加图像并在 uiwebview 中加载时占用大量内存

visual-studio - Visual Studio : How to store an image resource as an Embedded Resource?