如何在NumPy中获取RGB图像的均值颜色数组?
获取RGB图像各通道均值的Numpy方法
这问题我之前处理图像的时候也踩过坑!默认的np.mean()会把整个数组的所有元素揉在一起算均值,要拿到每个通道单独的平均值,只需要给mean()函数指定**计算的轴(axis)**就搞定了。
分两种常见图像格式来说:
1. 图像形状为 (高度, 宽度, 通道数)(比如PIL、Matplotlib读取的RGB图像)
这种是最普遍的格式,通道维度在最后。我们需要对高度(第0轴)和宽度(第1轴)的所有像素求平均,保留通道维度的结果:
import numpy as np # 假设image是读入的RGB图像,形状为(H, W, 3) channel_means = np.mean(image, axis=(0, 1)) print(channel_means) # 输出类似 [2.31, 4.4211, 10.01] 的数组
2. 图像形状为 (通道数, 高度, 宽度)(部分专业图像处理库的格式)
如果你的图像通道维度在最前面,那就对后面两个轴(高度和宽度)求平均:
channel_means = np.mean(image, axis=(1, 2))
举个直观的测试例子:
# 创建一个2x2的测试RGB图像,每个通道的像素值一致 test_image = np.array([ [[10, 20, 30], [10, 20, 30]], [[10, 20, 30], [10, 20, 30]] ]) # 计算各通道均值 means = np.mean(test_image, axis=(0, 1)) print(means) # 输出 [10. 20. 30.],完全符合预期
额外小提示:
- 如果用OpenCV读取图像,默认是BGR顺序,求出来的均值顺序也是BGR,如果需要RGB的话,记得先用
cv2.cvtColor(image, cv2.COLOR_BGR2RGB)转换一下。 - 不管图像是整数类型还是浮点类型,
np.mean()都会返回浮点型的均值数组,刚好满足你要的精度需求。
内容的提问来源于stack exchange,提问作者Denis D'yachkov
相关产品推荐
相关产品推荐

