2011-07-20 70 views
1

這可能看起來像一個愚蠢的問題,但我在乘法後矩陣的輸出大小有問題..根據基本知識,如果矩陣A有m * n,矩陣B是J * k ..那麼他們的產品將是大小m * K的..cvMulTransposed和輸出矩陣的維數?

所以根據下面我的代碼:

CvMat *meh, *meh2; 
    meh = cvCreateMat(2, 9, CV_32FC1); 
    meh2 = cvCreateMat(2, 2, CV_32FC1); 
    cvMulTransposed(meh, meh2, 1); 
    cvSave("meh.txt", meh2); 

MEH是一個2行,第9列的矩陣,所以它的轉置將是一個9行2列的矩陣正確?並且它們的乘法將給出2行2列矩陣(2 * 9乘以9 * 2)。

,這就是我爲我的輸出矩陣創建,meh2 ..這是輸出保存到文本:

%YAML:1.0 
meh: !!opencv-matrix 
    rows: 2 
    cols: 2 
    dt: f 
    data: [ -431602080., -431602080., -431602080., -431602080. ] 

可以看出它充滿了垃圾..值

但當我改變代碼,使輸出9 * 9矩陣,然後我可以看到保存文件中的實際相乘值。

在這裏,乘法後的輸出矩陣有第一個矩陣行和第二個列嗎?

乾杯

+0

你的問題沒有太大的意義。你沒有初始化你的數據,所以你當然會得到垃圾價值。你的問題是什麼? – etarion

回答

0

這是函數的聲明:

void cvMulTransposed(const CvArr* src, CvArr* dst, int order, const CvArr* delta=NULL, double scale=1.0) 

您使用的順序= 1,那麼這意味着乘法做是這樣的:

dst = scale* transpose[(src-delta)] * (src-delta) 

如果使用order 0 then then the multiplication is:

dst = scale* (src-delta) * transpose[(src-delta)] 

在你的情況爲你使用順序= 1,最終的矩陣是:

(9,2)  x  (2,9)  = (9,9) 
transpose  not transpose  result 

This is where you can get the documentation of the function

+0

非常感謝:)我確實閱讀了文檔的那部分內容,但是我似乎錯過了那個重要的觀點。非常感謝您指出:) – StuckInPhD

+0

先生,您問Stack Overflow的問題,我們回答您。部分哲學是upvote和/或接受答案...我不是一個乞丐,但我會很感激,如果你按照這個過程:) – jmartel

+0

抱歉,我試着upvoting,但被告知,我需要一個那15的聲望。我不知道我們有一個接受按鈕:p – StuckInPhD