使用 Opencv 的 [B G R] 像素总和

sum of [B G R] of pixels using Opencv

img = cv2.imread('example.png')

print(img[0][0],img[0][1],img[0][0]+img[0][0],(img[0][0]+img[0][0])/2)

我正在尝试获取 example.png 的两个像素的平均值,但是,它显示

[213 214 220] [195 218 225] [170 172 184] [85。 86. 92.]

而不是[408 432 445] [204 216 222]

似乎每个元素自动减去 256

img 的类型是

img 有数据类型 uint8。这意味着每个值都作为无符号整数存储在内存中的一个字节(8 位)中。这样的数字只能容纳 0 到 255 之间的数字。如果你试图超出它,它将环绕并从 0 开始。这就是你所说的减去 256。

要解决此问题,您可以通过这样做将您的值重铸为浮动值。

mean_img = (img.astype(float)+img2.astype(float))/2

mean_img.astype("uint8") # recast back to uint 8

由于数据类型uint8,像素的值范围为0到255,这意味着当值超出范围时,该值将换行。

您可以创建一个 np.array 并沿 axis=0 计算 np.mean

例如:

img = cv2.imread('example.png')
print(np.mean(np.array([img[0][0], img[0][0]], axis=0))