Numpy 点积

And*_*nov 2 python rgb numpy image-processing 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[:,:])
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Jai*_*ime 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)
Run Code Online (Sandbox Code Playgroud)