Numpy dot产品

时间:2013-05-28 18:17:51

标签: python image-processing numpy rgb yuv

我有一个用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]不是垂直向量。转置无济于事。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您的矩阵的形状为(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)