我有一个用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]不是垂直向量。转置无济于事。
有什么想法吗?
答案 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)