【发布时间】:2021-01-19 19:57:34
【问题描述】:
我有一个 640x480 RGB 图像,形状为 numpy (480, 640, 3) -- R、G、B 通道为 3 我想在每个像素,按照以下方式转换RGB值:
# for each pixel
for i in range(img.shape[0]):
for j in range(img.shape[1]):
# set the new RGB value at that pixel to
# (new RGB vector) = (const matrix A) * (old RGB vector) + (const vector B)
img[i,j,:] = np.reshape((np.matmul(A, np.expand_dims(img[i,j,:], axis = 1)) + B), (3,))
其中 A 的形状为 (3,3),B 的形状为 (3,1)。 如何使用 numpy 执行此操作而不在像素上编写循环?
【问题讨论】:
-
您的代码不起作用。
numpy.matmul(A, data[i,j,:].T) + B返回形状 (3,3) 而img[i,j,:]具有形状 (3,)。您将形状(3,3)分配给(3,)。 -
@wuxiekeji 好像是错字 - B 必须是
1D数组? -
我以我认为可行的方式对其进行了编辑,但无论哪种方式,目的都是在每个 rgb 像素处执行 (constant matrix A)*(rgb vector) + (constant vector B)。
-
@wuxiekeji 发布的解决方案对您有用吗?
标签: python python-3.x numpy math matrix