2013-05-28 80 views
2

我有一個用Numpy數組表示的圖像,即每個像素是一個數組[r,g,b]。 現在,我想使用矩陣乘法在YUV中進行轉換,並嘗試不使用循環。Numpy dot product

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

不是RGB,一個3維陣列。你能告訴我們什麼給'self.rgb.ndim'嗎? – petrichor

+0

self.rgb.ndim = 3 –

+0

所以,你不應該使用'self.yuv [:,:]'。這是HSV轉換的一個很好的答案。您可能想檢查它:http://stackoverflow.com/questions/4890373/detecting-thresholds-in-hsv-color-space-from-rgb-using-python-pil/4890878#4890878 – petrichor

回答

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)