我有三个BGR颜色值(存储在numpy数组中),并且我想计算它们的平均值(每个元素的平均值都是这样[numB,meanG,meanR])。
这是一个非常简单的任务,我发现可以这样做:
import numpy as np
bgr1 = np.array([6, 149, 254])
bgr2 = np.array([5, 146, 251])
bgr3 = np.array([5, 149, 251])
bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)
print(bgr_mean)
将输出与预期的一样:
[5 148 252]
我的问题是,当我在代码中实现此功能时,尽管每个元素的值和类型都相同,但它根本不会给出相同的结果。这段代码:
bgr1 = button_image[0][x]
print("bgr1 = " + str(bgr1))
print(type(bgr1))
bgr2 = button_image[0][x-1]
print("bgr2 = " + str(bgr2))
bgr3 = button_image[1][x+1]
print("bgr3 = " + str(bgr3))
bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)
print("bgr_mean = " + str(bgr_mean))
输出:
bgr1 = [6149254]
类'numpy.ndarray'
bgr2 = [5146251]
bgr3 = [5149251]
bgr_mean = [5 62 81]
Button_image是一个numpy数组BGR图像,而x(整数类型)是图像的中间(x轴,duh)。我的测试脚本与其他代码在同一项目中,使用的是Python 3.7.4和相同的numpy版本(1.16.3)
这是我的第一个问题,所以我希望我写的正确,如果您对造成此问题的原因有任何了解,请先谢谢您。
答案 0 :(得分:0)
因此,正如第一条评论所述,数组的dtype是问题所在。 因为我正在从BGR图像数组中获取BGR值,所以它们继承了它的dtype(uint8)。 解决方法是简单地将每个bgr数组转换为np.int32 dtype,然后计算其均值:
bgr1 = (button_image[0][x]).astype(np.int32)
bgr2 = button_image[0][x-1].astype(np.int32)
bgr3 = button_image[1][x+1].astype(np.int32)
bgr_mean = ((bgr1 + bgr2 + bgr3) / 3).astype(int)
print("bgr_mean = " + str(bgr_mean))
bgr_mean = [5148252]