2

我有一个用 Numpy 数组表示的图像,即每个像素都是一个数组 [r,g,b]。现在,我想使用矩阵乘法将它转换为 YUV 并尽量不使用循环。

self.yuv=self.rgb
self.yuv=dot([[   0.299,  0.587,    0.114  ],
              [-0.14713, -0.28886,  0.436  ],
              [   0.615, -0.51499, -0.10001]], 
             self.yuv[:,:])

我得到错误 - 对象未对齐。我想那是因为 self.yuv[i,j] 不是垂直向量。转置没有帮助。

有任何想法吗?

4

1 回答 1

5

您的矩阵具有形状(3, 3),而您的图像具有形状(rows, cols, 3)并且np.dot“在 a 的最后一个轴和 b 的倒数第二个轴上进行求和积”。

最简单的解决方案是反转内部操作数的顺序np.dot并转置转换矩阵:

rgb2yuv = np.array([[0.299, 0.587, 0.114],
                    [-0.14713, -0.28886, 0.436],
                    [0.615, -0.51499, -0.10001]])
self.yuv = np.dot(self.rgb, rgb2yuv.T)
于 2013-05-28T20:09:51.763 回答