2013-12-18 124 views
0

我有一個矩陣,稱爲coordinatePointPrev,它是1X3,還有另一個叫做coordinatePointCurrFrame的矩陣,它是3X1。最後一個叫做基金的矩陣是3X3;全部被定義爲矩陣。不能隱式地將類型'Emgu.CV.Matrix <double>'轉換爲'double

現在我想乘coordinatePointPrev *基金* coordinatePointCurr並保存在「resultOfEq」但6號線的結果,我遇到了錯誤說「無法隱式轉換類型‘Emgu.CV.Matrix’到「雙「;

我去的地方不對

Matrix<double> resultOfEq = new Matrix<double>(1, n);  
     for (int i = 0; i < n; i++) 
       { 
Matrix<double> coordinatePointPrev = new Matrix<double>(new double[,] { { a,b, 1 } }); 
Matrix<double> coordinatePointCurr = new Matrix<double>(new double[,] { {c, d, 1 } }); 
resultOfEq[0, i] = coordinatePointPrev.Mul(fund).Mul(coordinatePointCurr); 
       } 

回答

1

Mul方法,而你嘗試分配給其他矩陣的一個單元是雙返回矩陣。

你尋求的是這樣的

resultOfEq[0, i] = coordinatePointPrev.Mul(fund).Mul(coordinatePointCurr)[0,0];

這應該通過編譯器。但我不確定它會起作用(我不知道這個特定的庫,但其他任何一個會在Mul的其中一個調用中崩潰)。

1X3矩陣(coordinatePointPrev)* 3X3矩陣(基金)= 1X3矩陣

1X3矩陣* 1X3(coordinatePointCurr)矩陣,因爲你需要3X1矩陣能夠使用乘法運算符和生產1X1矩陣應該產生錯誤,你最有可能想要的。

所以我相信你想他們中的一個(coordinatePointCurr)是3X1:

new Matrix<double>(new double[,] { {c}, {d}, {1} } })

,或者你需要使用不同的乘法順序爲第一矩陣的列必須是相同的行第二矩陣(和矩陣乘法是不可交換的(A * B <> B * A))

另外我想提醒有在foreach沒有使用索引i,從而它基本上I-倍相同的(硬)計算得到i次相同的結果併產生1Xn矩陣fu 11個數字相同。

+0

我將coordinatePointCurr更改爲3X1,但錯誤仍然存​​在。我認爲它與opencv中的Matrix 和雙重 –

+0

之間的轉換有關,第一個代碼解決了這個問題。最後[0,0]很重要。 – tskala

相關問題